SQL Update触发器列名称

时间:2009-09-04 15:32:19

标签: sql sql-server tsql

无法在任何地方找到办法。我有一个触发更新的SQL触发器。触发器将有关更新的一些详细信息复制到某个程序使用的另一个表中。传递的详细信息包括更新列的名称。有许多很多潜在的专栏已经更新(虽然任何时候只有一个),我可以使用类似的东西:

IF UPDATE(ThisColumn)
BEGIN
   Do stuff with ThisColumn
END
IF UPDATE(ThatColumn)
BEGIN
   Do same stuff with ThatColumn
END

但是正如我所说的那样,这个表中有很多列,我确信必须有一种很好的方法来获取已更新的列的名称,而不会输入基本上相同IF语句的页面。

提前致谢!

1 个答案:

答案 0 :(得分:2)

您可以使用COLUMNS_UPDATED

Example usage 1, database journal

Example usage 2, KB 232195 此处派生的数字映射到sys.columns.column_id

我曾经有过工作的例子,但不再有了

巨大问题:由于metadata visibility,sys.columns的连接可能会失败。当teh调用包含在存储过程中时,这一点尤为重要。你必须在触发器中使用“EXECUTE AS OWNER”