在SQL Server 2008+中是否有可能强制将UPDATE
语句转换为INSERT
语句,从而创建包含旧列和更新列的新行?
答案 0 :(得分:3)
是的,这是INSTEAD OF UPDATE TRIGGER
的典型情况。
在表上创建以下触发器,它将为您在表上进行的每次更新插入一行。你可以在你的触发器中有更多的逻辑,但这只是一个基本的定义,只是为了给你一些想法。
在INSTEAD of UPDATE触发器中,您可以访问两个系统表Inserted
和deleted
。
Inserted
表将保存Update语句正在更新的行的新值。
Deleted
表将保存Update语句正在更新的行的旧值。
CREATE TRIGGER tr_Table_Instead_Of_Update
ON TABLE_NAME
INSTEAD OF UPDATE
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO TABLE_NAME(Col1, Col2 , Col3)
SELECT Col1, Col2 , Col3
FROM inserted
END