【问题标题】:sql update trigger to grab updated data and also select other row datasql update trigger 以获取更新的数据并选择其他行数据
【发布时间】:2017-05-08 08:43:44
【问题描述】:

我正在尝试找到一种方法,以便当更新触发器(或其他东西)可以从更新日期时间所在的同一行中选择表中的特定列更新时。我想在更新之前/之后将停止号和列数据捕获到另一个表中。我对 SQL 没问题,但我不是专家,所以我想不出如何做到这一点。

有可能吗?

【问题讨论】:

  • 请用一些示例数据解释并解释预期结果
  • 提示:inserteddeleted 是表,因此它们可以表示集合操作的结果。假设触发器总是只处理一行,而设计触发器通常是一个糟糕的计划。如果您绝对确定永远不会超过一排,那么添加对行数的检查,并使用RaIsErrorThrow 明确告知稍后来的人他们有试图执行不可接受的语句。 (if ( select Count(*) from inserted ) > 1 RaIsError( 'FooTable_Insert: No more than one row may be processed.', 25, 42 ) with log)
  • 另外,无论你做什么,都不要在触发器内启动任何长时间运行的进程。进来,出去。使用单独的独立流程处理您在触发器之外捕获的数据。

标签: tsql triggers sql-update


【解决方案1】:

是的,是的。阅读this。基本上有两个虚拟表,删除和插入,您可以在触发器中查询。 Deleted 包含正在被删除的行,并插入(您猜对了)正在插入的行。

“这有什么帮助?我正在更新。”确实,但更新实际上是先删除后插入,因此在更新后触发器中,您可以获得已删除的旧值。

【讨论】:

  • 所以(不看)你是说通过在更新语句中仅更新 1 行中的 1 列,插入和删除的表具有整行?
  • 是的。删除的表将保存整个旧行和插入的新行。您会在智能感知中看到相同的列名。
  • 我以为他们只包含更改。那么这解决了我的问题!
猜你喜欢
  • 2020-12-10
  • 2017-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多