目前只有一招:
在查询分析器中重新创建该SPDrop proc spname
Create proc spname......创建存储过程就行了.ANSI_NULLS 和 ANSI_WARNINGS 设置的保留问题,存储过程创建后,创建时的ANSI_NULLS 和 ANSI_WARNINGS 选项就会一直保留.所以删除存储过程重建就行了(在查询分析器中建,是因为查询分析器的默认ANSI_NULLS 和 ANSI_WARNINGS 设置是on想要操纵pc02上的数据方法很多,有用openquery或者在pc02建好存储过程,通过链接服务器,在pc01上调用pc02的存储过程,注意权限要记得分配,即可
在查询分析器中重新创建该SPDrop proc spname
Create proc spname......创建存储过程就行了.ANSI_NULLS 和 ANSI_WARNINGS 设置的保留问题,存储过程创建后,创建时的ANSI_NULLS 和 ANSI_WARNINGS 选项就会一直保留.所以删除存储过程重建就行了(在查询分析器中建,是因为查询分析器的默认ANSI_NULLS 和 ANSI_WARNINGS 设置是on想要操纵pc02上的数据方法很多,有用openquery或者在pc02建好存储过程,通过链接服务器,在pc01上调用pc02的存储过程,注意权限要记得分配,即可
SET ANSI_NULLS ON
SET ANSI_WARNINGS ON在最后面加两句:
SET ANSI_NULLS OFF
SET ANSI_WARNINGS OFF
我在查询管理器里执行如下语句:
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上的数据?
多谢指正!
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
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 '链接名'
GOCREATE PROC .....
AS
SET ANSI_WARNINGS ON
.....
GO
GO这个设置必须在建立存储过程的环境中去设置, 因为这个设置在存储过程创建时会保存当前设置, 存储过程执行时使用这个保存的设置, 不会受存储过程中的设置的影响
创建存储过程的时候, 直接在查询分析器中执行语句创建, 而不是在企业管理器中创建, 就不会有问题因为查询分析器中默认的设置是ON的
而企业管理器中默认的设置是OFF的
多谢指点!
我先在查询分析里执行如下语句建立链接服务器:
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上设置?该怎样设置?
请指正