SQL Server 2005 spustu - jak bezpiecznie ustalić, jeżeli opalanych UPDATE lub DELETE?

głosy
0

Mam następujący kod w SQL Server 2005 wyzwalacza:

TWORZENIE trigger [myTrigger] w [myTable]
FOR UPDATE, DELETE
TAK JAK
ZACZYNAĆ

DEKLARUJĄ @OperationType VARCHAR (6)
IF istnieje (SELECT 1 z INSERT ZIGNORUJ DE)
ZACZYNAĆ
    SET @ OperationType = 'Aktualizacja'
KONIEC
JESZCZE
ZACZYNAĆ
    SET @ OperationType = 'Usuń'
KONIEC

Moje pytanie: czy istnieje sytuacja, w której @OperationType nie jest prawidłowo wypełniona? EG: dane w tabeli jest zmieniana przez grono UPDATE / DELETE, ale spust nie zostanie zwolniony raz przez każdego z nich?

Czy masz lepszy sposób określić, czy wyzwalacz został zwolniony przez UPDATE lub DELETE?

Utwórz 09/12/2008 o 16:53
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
4

Dlaczego nie można po prostu utworzyć dwa oddzielne wyzwalaczy?

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

END

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

END
Odpowiedział 09/12/2008 o 17:00
źródło użytkownik

głosy
3

Prosta odpowiedź: Nie, nie będzie to sytuacja, w której spust nie wykrywa poprawnie (z wyjątkiem, gdy nie ma zmienionych wierszy).

Spust zostanie zwolniony raz dla każdego rachunku, więc sprawa nie jest możliwe i będzie działać poprawnie, ale chodzi o to, jeśli naprawdę chcesz robić różne zadania UPDATEi DELETE, lepiej użyć kilka wyzwalaczy.

Odpowiedział 09/12/2008 o 17:02
źródło użytkownik

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