我完全知道来自应用程序的 SQL 查询通常使用SET ARITHBAORT OFF
where 作为 SSMS(默认情况下)使用SET ARITHBAORT ON
. 我也相信这SET ARITHBAORT OFF
只是为了遗留兼容性,真正的查询应该使用SET ARITHBAORT ON
.
我有一个作为 C# Console App 批处理文件的一部分运行的查询。SET ARITHBAORT OFF
上下文是用和 准备的(默认情况下)SET ANSI_WARNINGS ON
。前 92 个调用执行良好,第 93 个调用总是锁定(每个调用使用不同的参数)。SET ARITHBAORT OFF
如果我在使用第 93 次调用中的参数调用存储过程之前使用,我已经能够在 SSMS 中重现这一点。
继续我的问题(抱歉到目前为止的背景信息).... Erland Sommarskog 文章指出:
接下来说到ARITHABORT,大家应该知道,在SQL 2005及以后的版本中,只要ANSI_WARNINGS为ON,这个设置影响为零。因此,没有理由为了此事而将其打开。
但是,我使用的是 SQL Server 2014,我发现:
SET ARITHBAORT ON
SET ANSI_WARNINGS ON
EXEC mySP -- Runs efficiently
运行良好,但
SET ARITHBAORT OFF
SET ANSI_WARNINGS ON
EXEC mySP -- Runs indefinitely
无限期地运行。因此,如果SET ANSI_WARNINGS ON
使ARITHBAORT
选项无关紧要,为什么我的查询会锁定?谢谢。