Quando si crea uno script SQL per creare un trigger su una tabella, volevo controllare che il trigger non esista già prima di crearlo. Altrimenti lo script non può essere eseguito più volte.SQL: Perché un CREATE TRIGGER deve essere preceduto da GO
Quindi ho aggiunto una dichiarazione per verificare prima se il trigger esiste. Dopo aver aggiunto quella dichiarazione, l'istruzione CREATE TRIGGER non funziona più.
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
Questo dà:
Msg 156, Level 15, State 1, Line 5
Incorrect syntax near the keyword 'TRIGGER'.
La soluzione sarebbe quella di abbandonare il grilletto esistente e quindi creare il nuovo:
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
La mia domanda è: w hy è il primo esempio che fallisce? Cosa c'è di così sbagliato nel controllare che il trigger esista?
Presenteresti lo stesso problema di quello che crei? – JeffO