Ich habe zwei SQL Server-Datenbanken.Verwenden von Triggern, um die Datenintegrität von ähnlichen Tabellen in zwei Datenbanken zu erhalten
Eines wird als Back-End für ein Ruby-On-Rails-System verwendet, von dem wir aufgrund der Ruby-Anwendungen, die wir in ASP.NET MVC umschreiben, noch verwendet werden.
Die Datenbanken haben ähnliche Tabellen, aber nicht identisch für die Tabellen Benutzer, Rollen und Rollen-Benutzer.
Ich möchte eine Art von Trigger erstellen, um die Tabellen user und roles-users auf jeder Datenbank zu aktualisieren, wenn eine Änderung an der anderen Datenbank der gleichen Tabelle vorgenommen wird.
Ich kann nicht einfach die Benutzer-Tabelle in der ursprünglichen Datenbank verwenden, weil Ruby eine andere Hash-Funktion für die Kennwörter hat, aber ich möchte sicherstellen, dass Änderungen auf dem einen System auf dem anderen sofort wiedergegeben werden. Ich möchte auch das offensichtliche Problem vermeiden, dass ein Update auf der einen Datenbank ein Update auf der anderen Datenbank auslöst, das ein Update auf der ersten auslöst und der Prozess sich selbst wiederholt, bis der Server abstürzt oder etwas Ähnliches passiert oder ein Deadlock auftritt .
Ich möchte keine Datenbankreplikation verwenden.
Gibt es eine etwas einfache Möglichkeit, dies auf einer Transaktion pro Transaktion zu tun?
EDIT
Der Auslöser wäre so etwas wie dies vom Konzept her sein:
USE Original;
GO
CREATE TRIGGER dbo.user_update
ON dbo.user WITH EXECUTE AS [cross table user identity]
AFTER UPDATE
AS
BEGIN
UPDATE Another.dbo.users SET column1=value1, etc., WHERE inserted.ID = Another.dbo.users.ID;
END
Das Problem, das ich ein rekursive Aufruf zu vermeiden versuchen.
Another.dbo.users wird einen ähnlichen Trigger haben, da die beiden Datenbanken verschiedene Arten von Anwendungen haben, Ruby-On-Rails auf der einen und ASP.NET MVC auf der anderen Seite, die möglicherweise an Daten arbeiten das sollte in den beiden Datenbanken gleich sein.
Haben Sie SQL Trigger gegoogled? Auf welche spezifischen Probleme sind Sie gestoßen, als Sie mit dem Schreiben des Codes begonnen haben und festgestellt haben, dass das nicht funktioniert hat? Wir schätzen es sehr, dass Sie die Anforderungen festgelegt haben, aber haben Sie schon etwas getan? Wenn ja, bitte Code angeben und speziell, was nicht funktioniert hat. – dfundako
Ich habe eine "execute as" -Klausel für die im dml-Trigger eingebettete Anweisung zum Einfügen, Löschen oder Aktualisieren verwendet, um den Vorgang in der anderen Datenbank auszuführen und dann zu überprüfen, ob der Benutzer, der dml ausführt, der datenbankübergreifende Benutzer ist Das cross-database update wird nicht aufgerufen, wenn der Benutzer angibt, dass die andere Datenbank der Ursprung des Aufrufs ist. –
Kühl. Geben Sie den Code an, den Sie ausprobiert haben und der in Ihrem ursprünglichen Post nicht funktioniert. Dann sagen Sie uns, warum es Ihre Anforderungen nicht speziell erfüllt hat. – dfundako