如何在存储过程中将本地表(local_table)的数据向远程表(remote_server.database.dbo.remote_table)插入?我在存储过程中执行向远程表插入时总是提示“异类查询要求为连接设置 ANSI_NULLS 和 ANSI_WARNINGS 选项。这将确保一致的查询语义。请启用这些选项,然后重新发出查询。”请问如何解决?

解决方案 »

  1.   

    set ansi_nulls on
    set ansi_warnings onANSI_NULLS
    当设置为 ON 时,所有与空值比较的值都取值为 NULL(未知)。当设置为 OFF 时,如果两个值都为 NULL,则非 Unicode 值与空值比较的值都取值为 TRUE。默认情况下,ANSI_NULLS 数据库选项为 OFF。
    连接级设置(使用 SET 语句设置)替代 ANSI_NULLS的默认数据库设置。默认情况下,当连接到 SQL Server 时,ODBC 和 OLE DB 客户端发出连接级 SET 语句,将会话的 ANSI_NULLS 设置为 ON。有关更多信息,请参见 SET ANSI_NULLS。
    在计算列或索引视图上创建或操作索引时,SET ANSI_NULLS 也必须为 ON。
    此选项的状态可通过检查 DATABASEPROPERTYEX 函数的 IsAnsiNullsEnabled 属性来确定。ANSI_WARNINGS
    当设置为 ON 时,在出现如"被零除"或聚合函数中出现空值这类情形时,将发出错误或警告。当设置为 OFF 时,聚合函数中出现空值时不会发出警告,而在出现"被零除"这类情形时将返回空值。默认情况下,ANSI_WARNINGS 为 OFF。
    在计算列或索引视图上创建或操作索引时,SET ANSI_WARNINGS 必须设置为 ON。 
    连接级设置(使用 SET 语句设置)替代 ANSI_WARNINGS 的默认数据库设置。默认情况下,当连接到 SQL Server 时,ODBC 和 OLE DB 客户端发出连接级 SET 语句,将会话的 ANSI_WARNINGS 设置为 ON。有关更多信息,请参见 SET ANSI_WARNINGS。
    此选项的状态可通过检查 DATABASEPROPERTYEX 函数的 IsAnsiWarningsEnabled 属性来确定。
      

  2.   

    请在查询分析器中创建这个存储过程,以后这个存储过程在企业管理和查询分析器都能修改了。  
     
    对于存储过程,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选项,而且默认值是对的。所以能在查询分析器创建此类存储过程,而不能在企业管理器创建此类存储过程。就是:
    create proc 名
    as
    SET ANSI_NULL_DFLT_ON on --注意
    SET ANSI_WARNINGS on select * from open...