SQL: Warum funktioniert ein CREATE TRIGGER muss vorangestellt werden, GEHEN
Wenn Sie eine SQL-Skript zum erstellen Sie einen trigger auf einer Tabelle, die ich wollte, um zu überprüfen, dass der trigger nicht bereits vorhanden, bevor ich ihn erstellen. Anderenfalls wird das Skript nicht ausgeführt werden kann, mehrere Male.
Also ich habe eine Anweisung überprüfen Sie zuerst, ob der trigger vorhanden ist. Nach dem hinzufügen, dass die Aussage, die CREATE TRIGGER-Anweisung nicht mehr funktioniert.
IF NOT EXISTS (SELECT name FROM sysobjects
WHERE name = 'tr_MyTable1_INSERT' AND type = 'TR')
BEGIN
CREATE TRIGGER tr_MyTable1_INSERT
ON MyTable1
AFTER INSERT
AS
BEGIN
...
END
END
GO
Gibt es:
Msg 156, Level 15, State 1, Line 5
Incorrect syntax near the keyword 'TRIGGER'.
Die Lösung wäre, löschen Sie die vorhandene trigger und erstellen Sie dann die neue ein:
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'tr_MyTable1_INSERT' AND type = 'TR')
DROP TRIGGER tr_MyTable1_INSERT
GO
CREATE TRIGGER tr_MyTable1_INSERT
ON MyTable1
AFTER INSERT
AS
BEGIN
...
END
GO
Meine Frage ist: warum ist das erste Beispiel Fehler? Was ist so falsch mit der überprüfung der trigger vorhanden ist?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bestimmte Aussagen müssen der erste sein der in einem batch (wie in, Gruppe von Anweisungen, getrennt durch GEHEN ).
Zitat:
Es ist einfach eine der Regeln für SQL Server-Chargen (siehe):
http://msdn.microsoft.com/en-us/library/ms175502.aspx
Ansonsten könnte man ändern, ein Objekt, sagen wir eine Tabelle, und Lesen Sie dann die änderung in der gleichen batch, bevor die änderung tatsächlich aus.
Schema änderungen sollte immer seperate batch aufruft...ich vermute, Sie tun es, um Ihre Garantie WÄHLEN Sie gelingen wird, wenn Sie ändern des Schemas in der gleichen charge, die Sie möglicherweise nicht in der Lage sein, um Garantie, dass. Nur eine Vermutung...