【问题标题】:.NET SQL Server Update Trigger.NET SQL Server 更新触发器
【发布时间】:2018-03-02 21:03:12
【问题描述】:

我正在通过 .NET Entity Framework 更新一个 SQL Server 表(比如 table1)。 table1 定义了一个更新触发器,用于更新 table2 上的数据。然后在保存更改后,会生成一个 SSRS 报告,该报告使用表 2 中的更新数据。

所有这些看起来都很好并且工作正常。

但是,偶尔在部署的应用程序中,我看到生成的报告会获取 table2 值,这些值是触发器执行之前的值。

到目前为止,我的理解是触发器是同步的,因此无法理解这个时间问题背后的原因。如果您有任何补救建议,也将不胜感激。

使用 .NET Framework 4.6、SQL Server 2014

【问题讨论】:

  • 您是否使用 NOLOCK 提示?这里的细节很少,所以我们大多是在猜测。
  • @SeanLange,我在检索报告数据时没有使用 NOLOCK 提示。当我在保存更改后调用报告时,不使用 NOLOCK 提示不应该没问题吗?抱歉,这个问题非常高级,因为我只想以简单的方式开始布局操作序列。
  • 你绝对不想要 NOLOCK。我希望它会那么简单,但唉。您是在触发器中还是在代码中运行报告?您是否 100% 在更新完成之前不调用报告?您的报告查询是否有 NOLOCK 提示?
  • 我正在使用 SSRS API 在我的 .NET 代码中生成报告,该 API 在完成保存实体框架上下文对象的更改时被调用。报告查询没有 NOLOCK 提示。

标签: asp.net sql-server


【解决方案1】:

我相信默认情况下触发器会在更新之前触发。在您必须使用属性 CREATE TRIGGER AFTER ACTION 定义触发器后使其触发。

您还可以让执行更新的 proc 在更新后生成 SSRS 报告,而不是使用触发器。

【讨论】:

  • sql server 中没有前置触发器之类的东西。只有 INSTEAD OF 和 AFTER。
  • 哦,哎呀。我猜它是默认之后的。
猜你喜欢
  • 2011-06-03
  • 1970-01-01
  • 2014-03-26
  • 1970-01-01
  • 2015-01-20
  • 2016-11-03
  • 2014-10-23
  • 2016-03-28
  • 2012-03-13
相关资源
最近更新 更多