[英]SQL Server 2005 triggers
我在表上創建了一個觸發器以進行更新。 如果發生任何更新,我想將舊值存儲在單獨的表中。 我正在嘗試從“插入”表中獲取舊值,但是更新后此表未填充舊值。
這是示例代碼:
CREATE TRIGGER [dbo].[Logs_Update]
ON [dbo].[Logs] AFTER UPDATE
AS
DECLARE @url varchar(50)
BEGIN
SELECT @url = i.url
FROM INSERTED i
INSERT INTO dbo.Triggers_tbl
(ID, URL)
VALUES
(1000, @url)
END
我從插入的表中獲取@url
為null。
請讓我知道扳機有什么問題
DELETED表包含“舊”值,而“ INSERTED”表包含“新”值。
除此之外,如果您的更新影響多行,則INSERTED和DELETED表可能包含多行,因此,您可能應該使用INSERT SELECT而不是變量來運行插入。
INSERT INTO dbo.Triggers_tbl(URL) SELECT d.url FROM DELETED d
“舊”值(在UPDATE
)在Deleted
偽表中可用:
CREATE TRIGGER [dbo].[Logs_Update]
ON [dbo].[Logs]
AFTER UPDATE
AS
DECLARE @url varchar(50)
SELECT @url = d.url from deleted d
INSERT INTO dbo.Triggers_tbl(ID,URL) VALUES(1000,@url)
正如HLGEM正確評論的那樣,OP的代碼假定將分別為每一行調用觸發器-這是不正確的。
鑒於此,觸發代碼確實應該處理一組正在更新的行 ,因此它應該類似於:
CREATE TRIGGER [dbo].[Logs_Update]
ON [dbo].[Logs]
AFTER UPDATE
AS
INSERT INTO dbo.Triggers_tbl(ID,URL)
SELECT 1000, d.url
FROM Deleted d
或類似的東西。
更新的記錄在DELETED虛擬表中,而不是INSERTED。 將“從插入”更改為“從已刪除”,這應該可以工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.