2011-10-14 6 views
5

Obecnie mam tabelę elementów i tabelę ItemWaste. Obie tabele będą miały kilka pól, takich jak: Nazwa, Kwota, itp. Jednak tabela ItemWaste będzie zawierała jeszcze jedno pole, którym jest TimeWasted. Chcę automatycznie wstawić element DELETED z tabeli Item do tabeli ItemWaste, a jednocześnie wstawić czas usunięcia do pola TimeWasted.Wyzwalacz SQL Server - Wstaw usunięty rekord do innej tabeli z czasem wykonania

Nie mam pojęcia, jak to zrobić, czy używasz spustu ???

Nadzieja mogą uzyskać pomoc tutaj ... wdzięczni za wszelkie opinie ... Dzięki ....

+0

wystarczy utworzyć wyzwalacz – Bala

Odpowiedz

8

Oczywiście - nie problem.

Trzeba podstawową AFTER DELETE spust - coś takiego:

CREATE TRIGGER trg_ItemDelete 
ON dbo.Item 
AFTER DELETE 
AS 
    INSERT INTO dbo.ItemWaste(Name, Amount, TimeWasted) 
     SELECT d.Name, d.Amount, GETDATE() 
     FROM Deleted d 

to wszystko jest! Jeden punkt do zapamiętania: wyzwalacz nazywa się raz na partię - np. jeśli usuniesz 100 wierszy naraz, zostanie on nazwany raz, a pseudo tabela Deleted będzie zawierać 100 wierszy. Wyzwalacz jest nie wywoływany raz w rzędzie (powszechne błędne przekonanie).

+0

To działa! Dzięki wielkie! – shennyL

+0

Btw, nie bardzo jasne, co masz na myśli przez jeden raz na partia, jeśli usunę 3 wiersze, usunięta tabela nadal będzie mieć 3 wierszy rytuał? – shennyL

+0

@ user834754: yes - jeśli posiadasz instrukcję SQL, która usuwa 3 wiersze - Twój trigger zostanie uruchomiony ** raz **, ale pseudo tabela "Deleted" będzie zawierać 3 wiersze, a zatem 3 wiersze zostaną wstawione do 'ItemWaste 'tabela. –

0

Tak, po prostu napisać wyzwalacz co można insert wiersz, gdy prowadzona jest akcja delete w innej tabeli, spójrz na: Triggers

Powiązane problemy