参见:sp_addlinkedserver 创建一个链接的服务器,使其允许对分布式的、针对 OLE DB 数据源的异类查询进行访问。在使用 sp_addlinkedserver 创建链接的服务器之后,此服务器就可以执行分布式查询。如果链接服务器定义为 Microsoft® SQL Server™,则可执行远程存储过程。或:OPENROWSET 包含访问 OLE DB 数据源中的远程数据所需的全部连接信息。当访问链接服务器中的表时,这种方法是一种替代方法,并且是一种使用 OLE DB 连接并访问远程数据的一次性的、特殊的方法。可以在查询的 FROM 子句中像引用表名那样引用 OPENROWSET 函数。依据 OLE DB 提供程序的能力,还可以将 OPENROWSET 函数引用为 INSERT、UPDATE 或 DELETE 语句的目标表。尽管查询可能返回多个结果集,然而 OPENROWSET 只返回第一个。 OPENDATASOURCE 不使用链接的服务器名,而提供特殊的连接信息,并将其作为四部分对象名的一部分。
请问:我在存储过程中使用你的语句出现以下的错误是什么意思:Error 7405: Heterogeneous queries require the ANSI_NULLS and ANSI_WARNINGS options to be set for the connection. This ensures consistent query semantics. Enable these options and then reissue your query. ---------------------------在Query Analyzer运行是可以的,但在存储过程中就会出错,这样也在存储过程中出现同样的错: exec sp_addlinkedserver 'csj2008','','SQLOLEDB','CSJ' exec sp_addlinkedsrvlogin 'csj2008','false',null,'MIS','MIS' select * from csj2008.生产系统.dbo.原料仓_库存资料我的意思是:我要在一台服务器的数据库上的存储过程调用另一台服务器的数据库上的数据,是怎样在存储过程中用语句实现.
请参考如下KB:BUG: Cannot use SQL Enterprise Manager to create stored procedures containing linked server objects http://support.microsoft.com/kb/296769/en-us
我测试了一下:exec sp_addlinkedserver '192.168.0.5','aa','SQLOLEDB','192.168.0.5' exec sp_addlinkedsrvlogin '192.168.0.5','false',null,'sa','123'gocreate proc tempproasselect top 2 customerid from [192.168.0.5].northwind.dbo.ordersgo exec temppro 没有报错,是不是存储过程里面有其他问题??
创建一个链接的服务器,使其允许对分布式的、针对 OLE DB 数据源的异类查询进行访问。在使用 sp_addlinkedserver 创建链接的服务器之后,此服务器就可以执行分布式查询。如果链接服务器定义为 Microsoft® SQL Server™,则可执行远程存储过程。或:OPENROWSET
包含访问 OLE DB 数据源中的远程数据所需的全部连接信息。当访问链接服务器中的表时,这种方法是一种替代方法,并且是一种使用 OLE DB 连接并访问远程数据的一次性的、特殊的方法。可以在查询的 FROM 子句中像引用表名那样引用 OPENROWSET 函数。依据 OLE DB 提供程序的能力,还可以将 OPENROWSET 函数引用为 INSERT、UPDATE 或 DELETE 语句的目标表。尽管查询可能返回多个结果集,然而 OPENROWSET 只返回第一个。
OPENDATASOURCE
不使用链接的服务器名,而提供特殊的连接信息,并将其作为四部分对象名的一部分。
如果少次量的调用 openrowset、opendatasource都可以 如果需要频繁的调用 建立链接数据库
---------------------------在Query Analyzer运行是可以的,但在存储过程中就会出错,这样也在存储过程中出现同样的错:
exec sp_addlinkedserver 'csj2008','','SQLOLEDB','CSJ'
exec sp_addlinkedsrvlogin 'csj2008','false',null,'MIS','MIS'
select * from csj2008.生产系统.dbo.原料仓_库存资料我的意思是:我要在一台服务器的数据库上的存储过程调用另一台服务器的数据库上的数据,是怎样在存储过程中用语句实现.
as
...
exec sp_addlinkedserver
exec sp_addlinkedsrvlogin
.....
exec sp_droplinkedserver
...
http://support.microsoft.com/kb/296769/en-us
exec sp_addlinkedsrvlogin '192.168.0.5','false',null,'sa','123'gocreate proc tempproasselect top 2 customerid from [192.168.0.5].northwind.dbo.ordersgo
exec temppro
没有报错,是不是存储过程里面有其他问题??