【问题标题】:Issue regarding update trigger in SQL Server关于 SQL Server 中的更新触发器的问题
【发布时间】:2014-04-15 19:10:32
【问题描述】:

我正在为表的更新后创建触发器。

该表包含c1、c2、c3、c4列,这些列c1、c2、c3、c4相互独立

触发器应该是“如果 c4 列发生更新......应该调用触发器并且应该检索和修改 c1 列中的值”

我们如何处理这种情况?

提前致谢

【问题讨论】:

  • 触发器将始终被调用,您可能必须编写代码以便它仅在检查第 4 列是否更改后才执行某些操作。顺便说一句,你有什么代码?我们不会帮你作弊。
  • HLGEM -- 这不是作业 :)
  • @user3534342 更有理由为您的问题付出更多努力
  • 这个问题与 COLUMNS_UPDATED() MSDN 文章中给出的示例非常相似。 technet.microsoft.com/en-us/library/ms186329.aspx

标签: sql-server sql-server-2008 triggers sql-server-2012


【解决方案1】:

试试这样的。 UPDATE 是一个棘手的小功能,但可以快速访问您所要求的内容。

UPDATE UT
    SET
        UT.C1 = CASE WHEN UPDATE(C4) THEN I.C4 ELSE UT.C1 END
FROM
    UnderlyingTable AS UT
    INNER JOIN inserted AS I ON (UT.PrimaryKey = I.PrimaryKey)

【讨论】:

  • :-) 这正是我想要的
【解决方案2】:

您可以使用AFTER/INSTEAD OF TRIGGER

INSERTED 表与DELETED 表进行比较以查看哪些列已更新,然后执行您的逻辑。

您也可以使用Column_Updated(columnName),但这可能会在将记录更新为相同值时出现问题。

更多信息: http://technet.microsoft.com/en-us/library/ms191300.aspx

【讨论】:

    【解决方案3】:

    您可以使用Columns_Updated(columnName) 来检查列值是否被更改,还有两个表inserteddeleted 在更新触发器中您可以从插入的新值和删除的旧值中查询

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-24
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多