2010-06-06 12 views

Odpowiedz

69

SQL Server wyzwala mają dostęp do 2 stołów „magicznych”, które zawierają wiersz dla każdego wiersza, który został wstawiony, zaktualizowane lub usunięte w rachunku, który spowodował spust do wykonania.

znalezienie wszystkich wstawionych wierszy na INSERT:

select * from inserted 

dla wszystkich usuniętych wierszy na DELETE:

select * from deleted 

instrukcji UPDATE, każdy wiersz zaktualizowanej będzie obecne zarówno w wstawionych, jak i usuniętych tabelach. Wstawiona tabela będzie zawierała nową wartość wiersza po instrukcji aktualizacji, a usunięta tabela będzie zawierała starą wartość wiersza tuż przed instrukcją aktualizacji. Dołącz do dwóch stołów, aby uzyskać to, czego potrzebujesz:

select i.*, d.* 
from inserted i 
join deleted d on (i.id = d.id) 
+0

+1 dziękuję za punkt dotyczący aktualizacji wierszy obecnych zarówno w tabelach usuniętych, jak i wstawionych. – mdma

+0

Tak jak lubię to rozwiązanie, chciałbym zwrócić uwagę, że _if_ tabela, której dotyczy wyzwalacz, nie ma klucza podstawowego, instrukcja 'update' nie będzie użyteczna :( –

+0

Dopóki istnieje jakiś sposób znaczące łączenie między dwiema tabelami (na przykład klauzula WHERE instrukcji UPDATE zazwyczaj używanej), będzie znaczące, nawet jeśli tabela nie ma formalnego klucza podstawowego. –

1

zechcesz specjalny spust usunięte i wstawione tabele. Od MSDN:

W DML naruszona, wkładane i usuwane tabele są wykorzystywane przede wszystkim do wykonywania następujących: Extend referencyjnej integralności pomiędzy tabelach. Wstawianie lub aktualizowanie danych w tabelach podstawowych leżących u dołu widoku. Sprawdź błędy i podejmij działania w oparciu o błąd. Znajdź różnicę między stanem tabeli przed modyfikacją danych i po niej i podejmij działania w oparciu o tę różnicę. Usunięta tabela przechowuje kopie odpowiednich wierszy podczas instrukcji DELETE i UPDATE. Podczas wykonywania instrukcji DELETE lub UPDATE wiersze są usuwane z tabeli wyzwalacza i przenoszone do usuniętej tabeli. Usunięte tabele i tabela wyzwalaczy zwykle nie mają wspólnych wierszy. Wstawiona tabela przechowuje kopie odpowiednich wierszy podczas instrukcji INSERT i UPDATE. Podczas transakcji wstawiania lub aktualizacji nowe wiersze są dodawane zarówno do wstawionej tabeli, jak i tabeli wyzwalacza. Wiersze we wstawionej tabeli są kopiami nowych wierszy w tabeli wyzwalacza.

check here for more info

+0

Ten link jest martwy. Czy możesz to zaktualizować? –

+1

@FedericoTraiman, link wydaje się działać dla mnie, wziął pod uwagę link msdn prawdopodobnie nie umarł. Dodałem jednak część treści do treści odpowiedzi. –

+0

Teraz żyje! Dzięki –

Powiązane problemy