Wir replizieren selektive Daten aus einer Haupt-DB in diverse andere DBs. Welche Daten in welche DB repliziert werden, steht in einer Tabelle.
Das Problem ist: Wie im Trigger die unterschiedlichen Datenbanken ansprechen?
Der USE-Befehl ist in Triggern nicht erlaubt, Variablen funktionieren an der Stelle auch nicht und der EXEC-Befehl kann nicht ausgeführt werden, da außerhalb des Triggers nicht auf die Tabelle „inserted“ zugegriffen werden kann.
DECLARE @SQL varchar(4000)
SET @SQL = 'INSERT INTO ' + @TableName + ' (' + ….
FROM inserted'
exec @SQL
Da wir noch eine überschaubare Anzahl DBs haben, ist es bislang so gelöst, das die DB-Namen zwar in der erwähnten Tabelle stehen, diese aber hart eincodiert ausgewertet werden, also z.B. im INSERT-Trigger
FETCH NEXT FROM cReplikation INTO @TrZielDb…
WHILE (@@FETCH_STATUS = 0)
BEGIN
IF RTrim(@TrZielDb)='DBName1'
BEGIN
INSERT INTO DBName1.dbo.Tabelle (...
...
END
IF RTrim(@TrZielDb)='DBName2'
BEGIN
INSERT INTO DBName2.dbo.Tabelle (...
...
END
...
End
Diese Lösung ist alles andere als elegant, sobald eine neue DB hinzukommt, muss der Trigger geändert werden.
Hat jemand eine gute Idee, wie man den DB-Namen parametrisieren kann?
Das Problem ist: Wie im Trigger die unterschiedlichen Datenbanken ansprechen?
Der USE-Befehl ist in Triggern nicht erlaubt, Variablen funktionieren an der Stelle auch nicht und der EXEC-Befehl kann nicht ausgeführt werden, da außerhalb des Triggers nicht auf die Tabelle „inserted“ zugegriffen werden kann.
DECLARE @SQL varchar(4000)
SET @SQL = 'INSERT INTO ' + @TableName + ' (' + ….
FROM inserted'
exec @SQL
Da wir noch eine überschaubare Anzahl DBs haben, ist es bislang so gelöst, das die DB-Namen zwar in der erwähnten Tabelle stehen, diese aber hart eincodiert ausgewertet werden, also z.B. im INSERT-Trigger
FETCH NEXT FROM cReplikation INTO @TrZielDb…
WHILE (@@FETCH_STATUS = 0)
BEGIN
IF RTrim(@TrZielDb)='DBName1'
BEGIN
INSERT INTO DBName1.dbo.Tabelle (...
...
END
IF RTrim(@TrZielDb)='DBName2'
BEGIN
INSERT INTO DBName2.dbo.Tabelle (...
...
END
...
End
Diese Lösung ist alles andere als elegant, sobald eine neue DB hinzukommt, muss der Trigger geändert werden.
Hat jemand eine gute Idee, wie man den DB-Namen parametrisieren kann?