2013-03-05 117 views
1

所以我是SQLite的新手,而且我習慣使用New | Old關鍵字。我已經看到有些人使用inserted值引用新創建的行,但這隻適用於插入而不是更新。 Howe可以得到類似於我在此查詢中使用的New的內容嗎?如何在SQL Server中爲觸發器引用「新」,「舊」行?

create trigger ports_country_id_in_check 
on [SISTEMA].Puerto 
after insert, update 
AS 
BEGIN 
    update [SISTEMA].Puerto 
    set country_id = (select secuencia from [SISTEMA].Pais where codigo = New.pais_asociado) 
    where [SISTEMA].Puerto.secuencia = New.secuencia 
end 
+3

'INSERTED'是'INSERT/UPDATE'上的新行。 'DELETED'是'DELETE'上的刪除行和'UPDATE'上的更新行(即行更新前的舊值) – Charleh 2013-03-05 16:13:15

+1

您是否查看了[documentation](http://msdn.microsoft.com/zh-cn/ -us/library/ms191300.aspx)解釋了「插入」(和「刪除」)表? – Pondlife 2013-03-05 16:16:45

回答

3

插入也將適用於更新。一個更新的行將被視爲已刪除行和已插入的行。所以你可以檢查什麼是現在和現在是什麼。

0
create trigger ports_country_id_in_check 
on [SISTEMA].Puerto 
after insert, update 
AS 
BEGIN 
    Declare @pais_asociado, @secuencia int 

    select @pais_asociado = Puerto.pais_asociado, @secuencia = Puerto.secuencia 
    from Puerto join inserted 
    where Puerto.secuencia = inserted.secuencia 

    update [SISTEMA].Puerto 
    set country_id = (select secuencia from [SISTEMA].Pais where codigo = @pais_asociado) 
    where [SISTEMA].Puerto.secuencia = @secuencia 
end