Announcement

Collapse
No announcement yet.

Parametrisierter DB Name in Trigger

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Parametrisierter DB Name in Trigger

    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?
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Working...
X