SQL Server 事件探查器显示正在调用但实际上并未执行的存储过程

标签 sql sql-server stored-procedures sql-server-profiler

我有一个问题我会试着总结一下:

我运行 SQL Server Profiler 来跟踪存储过程的调用。显示正在调用存储过程,但实际上并未执行。

我知道因为存储过程更新了一个列以避免并发并且每次调用存储过程都需要使用不同的(更新的)参数,所以当我直接运行从探查器到 SSMS 的调用时它运行正常,然后如果我第二次运行它时出现并发问题,表明它实际上并没有第一次运行。

我想不出为什么会这样。 SQL Server Profiler 显示正在调用的存储过程,但实际上并未被调用!

感谢和问候。

编辑:更多信息

  • 存储过程在本地完美运行
  • 如果我们运行分析器显示的完全相同的行,在分析器跟踪的目标数据库中,存储过程将完美运行。
  • 我使用 Entity Framework 运行它。但是,在调用该存储过程之前,我调用了其他一些存储过程,然后我调用了那个有问题的存储过程,然后我保存了更改。先前存储过程的更改也会保存。
  • 当我在本地调用存储过程时,我得到一个 OK,如果我使用相同的值运行存储过程,我会得到一个“并发错误”,因为每次调用都必须在某些参数(并发)中使用不同的值。知道这一点后,如果我在本地数据库中运行探查器,我会看到正在执行的存储过程,然后我尝试运行完全相同的行,但会出现并发错误,这意味着存储过程已正确运行。当我在目标数据库中运行探查器时,我看到正在执行存储过程,然后我尝试运行完全相同的行并且我得到一个 OK 意味着它从未运行过。如果我尝试再次运行该行,则会遇到并发问题。

基本上是一些奇怪的东西,可能是我目前看到的最奇怪的东西。 SQL Server Profiler 显示正在调用的存储过程,但显然它从未完成,但存储过程完全正常,因为我知道如果我直接运行探查器显示的完全相同的调用,它将运行正常。

有点奇怪,但我希望能更清楚地说明这一点。

最佳答案

我们通过更改设置“ARITHABORT”解决了这个问题。

试图找出问题的最糟糕的事情是存储过程调用在 Entity Framework 中不起作用,而在 SSMS 中起作用,这是因为 SSMS 覆盖了一些选项,而我们没有看到该问题。

我们将旧应用程序安装到相同的环境(相同的数据库)和应用程序的其他一些不同的地方,它显示了这个错误:

UPDATE 失败,因为以下 SET 选项的设置不正确:“ARITHABORT”。验证 SET 选项是否正确用于索引 View 和/或计算列上的索引和/或过滤索引和/或查询通知和/或 XML 数据类型方法和/或空间索引操作。

所以问题出在更新上,但更新不是直接来自 SP,而是来自 SP 触发的触发器触发的触发器,所以我们没有任何日志,尽管它很疯狂声音。

对我们来说幸运的是,我们尝试通过提示我们正确的方向来替换“修复”了问题。

感谢大家的帮助!

关于SQL Server 事件探查器显示正在调用但实际上并未执行的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23562153/

相关文章:

sql - 将行值转换为 SQL Server 中的列 (PIVOT)

SQL Server更新列比较跨行的值

mysql - SQL 同列减法

sql-server - 来自其他租户的应用程序的 Azure SQL AAD 身份验证

c# - 如何使用不同的 Windows 帐户连接到 SQL Server

sql - gorp 更新未更新

c# - DELETE 命令超时

mysql - 如何使用存储过程从 01-04-2014 到当前日期之间的 mysql 数据库中获取数据

sql - 在单个存储过程中更改表和更新列?

sql - 如何从一个存储的proc中从SYS_REFCURSOR中获取数据,并在另一个过程中使用它?