SQL Server 2005 grilletto - come determinare in modo sicuro se sparato da UPDATE o DELETE?

voti
0

Ho il seguente codice in un 2005 di innesco di SQL Server:

CREATE TRIGGER [MyTrigger] ON [myTable]
FOR UPDATE, DELETE
COME
INIZIO

DICHIARARE @OperationType VARCHAR (6)
SE ESISTE (SELEZIONARE 1 DA INSERIRE IGNORE ED)
INIZIO
    SET @ OperationType = 'Aggiorna'
FINE
ALTRO
INIZIO
    SET @ OperationType = 'Elimina'
FINE

La mia domanda: c'è una situazione in cui @OperationType non viene popolata correttamente? EG: i dati nella tabella viene modificata da un gruppo di UPDATE / DELETE, ma il grilletto non viene generato una volta per ognuno di loro?

Hai un modo migliore per determinare se il trigger è stato sparato da un UPDATE o DELETE?

È pubblicato 09/12/2008 alle 14:53
fonte dall'utente
In altre lingue...                            


2 risposte

voti
4

Perché non solo creare due trigger separate?

CREATE TRIGGER [myUpdateTrigger] ON [myTable]
FOR UPDATE
AS
BEGIN

END

CREATE TRIGGER [myDeleteTrigger] ON [myTable]
FOR DELETE
AS
BEGIN

END
Risposto il 09/12/2008 a 15:00
fonte dall'utente

voti
3

Risposta semplice: No, non ci sarà una situazione in cui il grilletto non riesce a rilevare correttamente (tranne quando non ci sono righe modificate).

Il trigger sarà licenziato una volta per ogni affermazione, quindi la cosa non è possibile e che funzionerà correttamente, ma il punto è, se si vuole veramente fare diversi compiti per UPDATEe DELETE, è meglio utilizzare un paio di trigger.

Risposto il 09/12/2008 a 15:02
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more