关于sqlserver 链接服务器 asni nulls 和ansiwarnings设置的问题

我在server1上的phs数据库上使用sp_addlinkedserver 建立了一个连接服务器(数据源为ODBC数据源,名为server2)连接到同是sqlserver 的server2 上的phs数据库,这时我在server1上的查询分析器上
select * from server2.phs.dbo.csmain 执行成功没有任何错误

但我创建了一个存储过程
create procedure sp_cs
as
begin
select * from server2.phs.dbo.csmain
end

此时提示错误7405,异类查询要求连接设置ansi_nulls 和ansi_warnings选项,这确保一致的查询语义,请启用这些选项,然后在重新发出查询。(该错误框的title是:Microsoft SQL-DMO (ODBC SQLState:42000))

但是我在数据库属性上设置了ANSI_NULLS和ANSI_WARNINGS选项后还是提示同样的错误,检查了ODBC数据源设置发现ANSI_NULLS和ANSI_WARNINGS选项是默认的设置,更何况如果此处未设置,查询分析器执行相同的语句也不会成功。

该如何设置才能避免此类错误的发生?

我太迷茫了,神啊,救救我吧!
---------------------------------------------------------------

我也遇到这样的问题,我告诉解决方法和原因。

请在查询分析器中创建这个存储过程,以后这个存储过程在企业管理和查询分析器都能修改了。

对于存储过程,SQL Server 使用最初创建存储过程时的 SET ANSI_NULLS 设置值。无论随后何时执行存储过程,SET ANSI_NULLS 的设置都还原为其最初使用的值并生效。当在存储过程内唤醒调用 SET ANSI_NULLS 时,其设置不更改。

在执行分布式查询时应将 SET ANSI_NULLS 设置为 ON。

在执行分布式查询时应将 ANSI_WARNINGS 设置为 ON。

企业管理中的ANSI_NULLS和ANSI_WARNINGS选项不对,但没有方法改动。在查询分析器可以设置ANSI_NULLS和ANSI_WARNINGS选项,而且默认值是对的。所以能在查询分析器创建此类存储过程,而不能在企业管理器创建此类存储过程。

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus