目前只有一招:
在查询分析器中重新创建该SPDrop  proc spname 
Create proc spname......创建存储过程就行了.ANSI_NULLS 和 ANSI_WARNINGS 设置的保留问题,存储过程创建后,创建时的ANSI_NULLS 和 ANSI_WARNINGS 选项就会一直保留.所以删除存储过程重建就行了(在查询分析器中建,是因为查询分析器的默认ANSI_NULLS 和 ANSI_WARNINGS 设置是on想要操纵pc02上的数据方法很多,有用openquery或者在pc02建好存储过程,通过链接服务器,在pc01上调用pc02的存储过程,注意权限要记得分配,即可

解决方案 »

  1.   

    在最前面加两句:
    SET ANSI_NULLS ON
    SET ANSI_WARNINGS ON在最后面加两句:
    SET ANSI_NULLS OFF
    SET ANSI_WARNINGS OFF
      

  2.   

    PNN28() :
    我在查询管理器里执行如下语句:
    SET ANSI_NULLS ON
    SET ANSI_WARNINGS ON
    exec sp_addlinkedserver  'srv_lnk','','SQLOLEDB','pc02'
    exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa','psa'
    然后在存储过程里书写如下语句:
    SET ANSI_NULLS ON
    SET ANSI_WARNINGS ON
    insert into srv_lnk.sales_backup.dbo.muse (id,lyname,lyaccount,lydate,lymemo,lyprice,lypurchaser,lyasscard,lytel,lylogin,lynumber,lyqk)
    select * from muse where lydate between @t1 and @t2
    SET ANSI_NULLS Off
    SET ANSI_WARNINGS Off保存时还是提示出错,错误信息:
    服务器: 消息 7405,级别 16,状态 1,行 3
    异类查询要求为连接设置 ANSI_NULLS 和 ANSI_WARNINGS 选项。这将确保一致的查询语义。请启用这些选项,然后重新发出查询。请问怎么能为连接设置 ANSI_NULLS 和 ANSI_WARNINGS 选项?如何能在pc01上操纵pc02上的数据?
    多谢指正!
      

  3.   

    SET ANSI_NULLS ON
    SET ANSI_WARNINGS ON
    exec sp_addlinkedserver  'srv_lnk','','SQLOLEDB','pc02'
    exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa','psa'
    然后在存储过程里书写如下语句:
    SET ANSI_NULLS ON
    SET ANSI_WARNINGS ON(这里还设置做什么?...)
    insert into srv_lnk.sales_backup.dbo.muse (id,lyname,lyaccount,lydate,lymemo,lyprice,lypurchaser,lyasscard,lytel,lylogin,lynumber,lyqk)
    select * from muse where lydate between @t1 and @t2
    SET ANSI_NULLS Off
    SET ANSI_WARNINGS Off
      

  4.   

    ----添加链接服务器
    EXEC sp_addlinkedserver '链接名','','MSDASQL',NULL,NULL,'DRIVER={SQL Server};SERVER=链接服务器名;UID=sa;PWD=密码;'
    EXEC sp_addlinkedsrvlogin '链接名', 'false', NULL, 'sa', '密码'
    ----插入数据
    insert into 链接名.数据库名.所有者.表名 select * from 源数据库名.所有者.表名
    ----删除链接
    exec sp_droplinkedsrvlogin '链接名',null
    exec sp_dropserver  '链接名'
      

  5.   

    SET ANSI_NULLS ON
    GOCREATE PROC .....
    AS
    SET ANSI_WARNINGS ON
    .....
    GO
      

  6.   

    SET ANSI_NULLS ON
    GO这个设置必须在建立存储过程的环境中去设置, 因为这个设置在存储过程创建时会保存当前设置, 存储过程执行时使用这个保存的设置, 不会受存储过程中的设置的影响
      

  7.   

    在创建或更改存储过程时,SQL Server 将保存 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 的设置。执行存储过程时,将使用这些原始设置。因此,所有客户端会话的 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 设置在执行存储过程时都将被忽略。在存储过程中出现的 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 语句不影响存储过程的功能。其它 SET 选项(例如 SET ARITHABORT、SET ANSI_WARNINGS 或 SET ANSI_PADDINGS)在创建或更改存储过程时不保存。如果存储过程的逻辑取决于特定的设置,应在过程开头添加一条 SET 语句,以确保设置正确。从存储过程中执行 SET 语句时,该设置只在存储过程完成之前有效。之后,设置将恢复为调用存储过程时的值。这使个别的客户端可以设置所需的选项,而不会影响存储过程的逻辑。
      

  8.   

    一般来说
    创建存储过程的时候, 直接在查询分析器中执行语句创建, 而不是在企业管理器中创建, 就不会有问题因为查询分析器中默认的设置是ON的
    而企业管理器中默认的设置是OFF的
      

  9.   

    zjcxc(邹建):
    多谢指点!
    我先在查询分析里执行如下语句建立链接服务器:
    exec sp_addlinkedserver  'srv_lnk','','SQLOLEDB','pc02'
    执行成功!
    然后新建查询文件执行如下语句建立存储过程:
    CREATE PROCEDURE [dbo].[output] @t1 datetime,@t2 datetime  AS
    exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa','psa'
    insert into srv_lnk.dbo.sales_backup.muse (id,lyname,lyaccount,lydate,lymemo,lyprice,lypurchaser,lyasscard,lytel,lylogin,lynumber,lyqk)
    select * from  muse where lydate between @t1 and @t2
    GO
    却提示如下错误:
    服务器: 消息 18456,级别 14,状态 1,过程 output,行 3
    用户 'pc02\Guest' 登录失败。
    请问是否还要在pc02上设置?该怎样设置?
    请指正
      

  10.   

    exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa','psa'这个应该在创建存储过程前执行