Frage

Ist es in einem in MS SQL Server 2005 ausgeführten Skript möglich, einen Auslöser von einer Datenbank in eine andere zu kopieren?

Ich wurde gebeten, ein Testskript für einen Trigger zu schreiben, den mein Projekt verwendet. Unsere Teststruktur besteht darin, eine leere Datenbank zu erstellen, die nur das zu testende Objekt enthält, und dann ein Skript in dieser Datenbank ausführen, in dem alle anderen Objekte erstellt werden, die für den Test benötigt werden, füllen sie aus, läuft alle erforderlichen Tests aus, vergleicht die Ergebnisse mit den erwarteten Ergebnissen. und fallen dann alles außer dem zu testenden Objekt fallen.

Ich kann nicht einfach eine Datenbank erstellen, die mit Ausnahme des Auslösers leer ist, da der Auslöser von mehreren Tabellen abhängt. In meinem Testskript wird derzeit der Auslöser erstellen, nachdem alle erforderlichen Tabellen erstellt wurden. Dies ist jedoch nicht der Fall, da das Testskript das zu testende Objekt nicht enthalten darf.

Was vorgeschlagen wurde, ist, dass ich den Trigger an diesem Punkt im Skript aus der Live -Datenbank in die Testdatenbank kopieren kann, anstatt einen Auslöser zu erstellen. Ich hatte ein schnelles Google und habe keinen Weg gefunden, dies zu tun. Also meine Frage - ist das überhaupt möglich, und wenn ja, wie kann ich das tun?

War es hilfreich?

Lösung

Sie könnten den Text des Auslösers lesen sp_helptext (triggername)

Oder Sie können den Text in eine Variable auswählen und diese ausführen:

declare @sql varchar(8000)


select @sql = object_definition(object_id) 
from sys.triggers
where name = 'testtrigger'

EXEC @sql

Andere Tipps

Ich habe eine gespeicherte Prozedur, die eine Reihe von Tabellen in eine Testdatenbank kopiert. Um es weniger anfällig für Fehler zu machen, die möglicherweise die falsche Datenbank ändern könnten, möchte ich es vermeiden USE und stattdessen explizit pro Anweisung angeben, aus welcher Datenbank der Trigger kopiert wird.

Mit der Hilfe von Diese Antwort, Ich habe mir diese Lösung ausgedacht:

DECLARE @sql NVARCHAR(MAX);
EXEC SourceDB.sys.sp_executesql
    N'SELECT @output = (SELECT OBJECT_DEFINITION(OBJECT_ID(''TriggerName'')))',
    N'@output VARCHAR(MAX) OUTPUT',
    @output = @sql OUTPUT;
EXEC DestDB.sys.sp_executesql @sql;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top