Ich verwende Trigger, um zwei identische Tabellen in einer einzigen Datenbank synchron zu halten. Einer ist für ein internes proprietäres System, der andere wird verwendet, um eine Teilmenge von Daten nach außen zu bringen. Ich kann nicht die gleiche Tabelle für beide verwenden.SQL Server 2 Tabelle Sync Rekursion
Ich brauche Updates, fügt, löscht in einer der Tabellen, die auf die andere angewendet werden.
Bisher verwende ich Trigger für beide Tabellen anstelle einer geplanten gespeicherten Prozedur, weil ich sofortige Updates wollte. Das Problem besteht darin, dass eine Aktualisierung der Tabelle A den Auslöser auslöst, um die Tabelle B zu aktualisieren, die einen Auslöser auslöst, um die Tabelle A zu aktualisieren, die den Auslöser für die Tabelle B ... auslöst.
Was ist der beste Weg, um die Rekursion zu stoppen?
Eine Möglichkeit ist es, die Daten zuerst zu überprüfen, um zu sehen, ob es anders ist, so etwas wie diese:
SELECT @cempno = inserted.cempno FROM inserted
SELECT @count = COUNT(*)
FROM jcempy j INNER JOIN zhhjcempy z ON j.cempno = z.cempno AND j.cempno = @cempno
WHERE (j.ccostcode <> z.ccostcode)
OR (j.cimearnreg <> z.cimearnreg)
OR (j.cimearnot <> z.cimearnot)
OR (j.cimearndt <> z.cimearndt)
OR (j.cimearnl1 <> z.cimearnl1)
IF @count = 1
BEGIN
-- Update the record
END
Eine weitere Möglichkeit, eine dritte Tabelle zu verwenden, den Statusflags sein könnte hält, welche Tabelle zeigen zunächst die Eingeweihten update, aber ich habe das Gefühl, dass das ein Problem sein wird, wenn ich 100 Benutzer habe, die auf das System hämmern.
Irgendwelche Ideen oder Kommentare, welche Art von Leistungseinbußen die Datenüberprüfung erleiden wird?
Danke!
Können Sie eine Tabelle tatsächlich eine [aktualisierbare Ansicht] (https://msdn.microsoft.com/en-nz/library/ms187956.aspx#Anchor_3) auf die andere zeigen? – Blorgbeard
@Blorgbeard Leider sind hier keine Drittanbieter-Tools enthalten. Interessante Idee, daran habe ich nicht gedacht. – NelsonH
Sie benötigen ein Redesign, das keine Trigger verwendet. Es gibt ein altes Sprichwort: "Ein Mann, der eine Uhr hat, weiß, wie spät es ist, ein Mann, der zwei hat, ist nie sicher." – JVC