小编Dus*_*sey的帖子

应用程序执行时存储过程出现 ANSI_NULLS 和 ANSI_WARNINGS 错误

我有一个存储过程,在通过应用程序执行时出现以下错误:

异构查询需要为连接设置 ANSI_NULLS 和 ANSI_WARNINGS 选项。这确保了一致的查询语义。启用这些选项,然后重新发出您的查询。

该存储过程SELECT中有一条语句连接到链接服务器表以返回结果。如果直接在SMS中执行这个存储过程,是没有任何问题的。如果我通过 ODBC 连接通过脚本执行存储过程,那么就没有问题。生成错误的唯一方法是当应用程序尝试执行它时。

查看应用程序时,没有错误。事实上,看起来运行成功,只是没有任何结果。我们能够识别此错误的唯一方法是运行 SQL 跟踪。

跟踪显示没有任何进程实际运行,相反,它只是立即出错并出现该错误。跟踪还表明它没有以不同的方式执行(例如exec sp_executesql或类似的方式)。我可以看到存储过程开始执行,然后出现错误,然后停止。

我对此进行了大量研究,答案似乎很简单,但没有任何效果。

我尝试将SET ANSI_NULLS ON&添加SET ANSI_WARNINGS ON到存储过程中,甚至将其移动到其中的不同位置。但始终没能成功

另外,尝试调整数据库级别设置 -

ALTER DATABASE [NGDevl] SET ANSI_NULL_DEFAULT OFF WITH NO_WAIT
GO
ALTER DATABASE [NGDevl] SET ANSI_NULLS OFF WITH NO_WAIT
GO
ALTER DATABASE [NGDevl] SET ANSI_WARNINGS OFF WITH NO_WAIT
GO
Run Code Online (Sandbox Code Playgroud)

但即使在重新启动 SQL 实例后也不起作用。

我唯一的另一个想法是让应用程序使用其中的设置部分执行过程,就像 ---

SET ANSI_NULLS ON;SET ANSI_WARNINGS ON;exec sp_storedproc 0,0,'A','0001'
Run Code Online (Sandbox Code Playgroud)

但不幸的是,我们无法控制应用程序来尝试这一点。

此外,重新创建了存储过程,以便将链接服务器所需的所有数据提取到临时表中,使其位于本地,然后加入到那里,但出现同样的问题。

你们有什么想法或可以在这里尝试吗?该错误似乎应该很容易修复,只是不确定我错过了什么。

sql-server sql-server-2012

2
推荐指数
1
解决办法
2万
查看次数

标签 统计

sql-server ×1

sql-server-2012 ×1