2010-04-28 3 views
5

Biorąc pod uwagę, że SQL Server nie pozwala na modyfikację logicznych tablic INSERTED i DELETED w wyzwalaczu, czy istnieje prosty sposób na zmianę wartości pojedynczej kolumny i nie trzeba ponownie pisać całej instrukcji wstawiania?Serwer SQL zamiast wyzwalaczy wstawiania - czy istnieje prosty sposób modyfikowania pojedynczej kolumny?

Na przykład tabela, do której stosuję wyzwalacz, ma 20 kolumn. Chcę zmodyfikować wartość z tabeli INSERTED dla jednej kolumny (dla każdego wiersza), a następnie wstawić ten wiersz do tabeli. Czy mogę to zrobić bez pisania instrukcji wstawiania z 19 kolumnami plus jedną kolumną, której wartość modyfikuję?

Odpowiedz

7

Tak, po prostu użyj wyzwalacza "po wstawieniu", zamiast wyzwalacza "zamiast wstawiania".

W ten sposób wiersz został już wstawiony do tabeli, a wszystko, co musisz zrobić, to wydać (ostrożnie spreparowane) polecenie aktualizacji, zwykle poprzez wewnętrzne dołączenie do tabeli INSERTED w polu klucza podstawowego.

+0

Oczywiście! Dzięki! – Matt

3

Aby dodać więcej szczegółów do BradCs odpowiedź:

składni do aktualizacji z łączeniem jest trochę słaby

Update table 
    set columnA = inserted.columnA/10 
from table 
inner join inserted on table.id = inserted.id