【问题标题】:SQL Server trigger count updated columns before updateSQL Server 触发器计数更新前更新的列
【发布时间】:2018-11-26 21:00:42
【问题描述】:

我有一个名为“Users”的表,其中包含(id、name、lastname、dni、dob、city 和 lastUpdated)

我想做的是,执行一个触发器 INSTEAD OF UPDATE 并在其中计算将要更新的列数,如果要更新的唯一列是“lasUpdated”列,则不要更新任何内容。

CREATE TRIGGER USER_TRIGGER
ON USERS
INSTEAD OF UPDATE
AS
/* if the updated column is ONLY lasUpdated */
IF (COUNT(UPDATED_CLOUMNS) == 1 && UPDATED_COLUMN == "lasUpdated")
BEGIN 
ROLLBACK TRANSACTION
RETURN 
END
GO

知道如何实现它吗? 提前谢谢你。

【问题讨论】:

  • 使用columns_updated() (docs.microsoft.com/en-us/sql/t-sql/functions/…) 您需要实际运行更新并打印位模式才能知道您要查找的模式,
  • 您可能也不想要instead of update 触发器,因为您必须手动执行任何所需的更新。您可以使用和after update 触发器来实现您的既定目标。

标签: sql-server triggers sql-update


【解决方案1】:

一种方法是在您的 INSTEAD OF 触发器中进行更新:

WHERE inserted.Col1<>deleted.Col1
OR inserted.Col2<>deleted.Col2
etc, for all columns except "lasUpdated"

请注意,如果任何列可以为 NULL,您也需要在逻辑中处理它。

【讨论】:

  • 非常感谢您的建议,对我帮助很大。
猜你喜欢
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
  • 2011-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-23
  • 2014-03-26
相关资源
最近更新 更多