Sql server 如何获取触发器中“仅更新列”的名称?
我想从触发器内部打印“仅更新列”的名称 例如,我的表有三列——ColA、ColB和ColC 如果我只更新ColB,我的触发器应该只打印ColB 如果我只更新可乐和可乐,我的触发器应该只打印可乐和可乐Sql server 如何获取触发器中“仅更新列”的名称?,sql-server,triggers,Sql Server,Triggers,我想从触发器内部打印“仅更新列”的名称 例如,我的表有三列——ColA、ColB和ColC 如果我只更新ColB,我的触发器应该只打印ColB 如果我只更新可乐和可乐,我的触发器应该只打印可乐和可乐 我可以知道如何以一种更短更干净的方式做到这一点吗?就我个人而言,我讨厌触发器,并且在大多数时候尽量避免它们- 但是,我知道的唯一方法是在触发器代码中更新函数列。另请参见以下示例:此网站帮助了我- 成功了。请在LinqPad中试用。如果键入->SQL SERVER如何确定触发器中哪些列被更新到goog
我可以知道如何以一种更短更干净的方式做到这一点吗?就我个人而言,我讨厌触发器,并且在大多数时候尽量避免它们- 但是,我知道的唯一方法是在触发器代码中更新函数列。另请参见以下示例:此网站帮助了我-
成功了。请在LinqPad中试用。如果键入->SQL SERVER如何确定触发器中哪些列被更新到google中,您可能会对返回的第一个链接感兴趣我检查了它。这是有用的。谢谢,不是为我工作。如果有许多列,则出现溢出异常。这项工作可以看到所有答案:
create table Sample1
(
a varchar(10),
b varchar(10),
c varchar(10)
);
alter trigger TR_Sample1_Update ON Sample1 for update as
DECLARE @modifiedColumns nvarchar(max)
SET @modifiedColumns = STUFF((SELECT ',' + name FROM sys.columns WHERE object_id = OBJECT_ID('Sample1') AND COLUMNS_UPDATED() & (POWER(2, column_id - 1)) <> 0 FOR XML PATH('')), 1, 1, '')
PRINT @modifiedColumns
go
update Sample1 set a = 1 where a = 1
update Sample1 set b = 4 where a = 1
update Sample1 set c = 5 where a = 1
update Sample1 set a = 1, c = 5 where a = 1
update Sample1 set a = 1, b = 4, c = 5 where a = 1