请问如何在一台服务器的数据库上的存储过程调用另一台服务器的数据库上的数据??急救!!!!!!!!

解决方案 »

  1.   

    参见:sp_addlinkedserver
    创建一个链接的服务器,使其允许对分布式的、针对 OLE DB 数据源的异类查询进行访问。在使用 sp_addlinkedserver 创建链接的服务器之后,此服务器就可以执行分布式查询。如果链接服务器定义为 Microsoft® SQL Server™,则可执行远程存储过程。或:OPENROWSET
    包含访问 OLE DB 数据源中的远程数据所需的全部连接信息。当访问链接服务器中的表时,这种方法是一种替代方法,并且是一种使用 OLE DB 连接并访问远程数据的一次性的、特殊的方法。可以在查询的 FROM 子句中像引用表名那样引用 OPENROWSET 函数。依据 OLE DB 提供程序的能力,还可以将 OPENROWSET 函数引用为 INSERT、UPDATE 或 DELETE 语句的目标表。尽管查询可能返回多个结果集,然而 OPENROWSET 只返回第一个。
    OPENDATASOURCE
    不使用链接的服务器名,而提供特殊的连接信息,并将其作为四部分对象名的一部分。
      

  2.   

    同意楼上的说明 在企业管理器中去编写存储过程的确会有一些问题
    如果少次量的调用 openrowset、opendatasource都可以 如果需要频繁的调用 建立链接数据库
      

  3.   

    请问:我在存储过程中使用你的语句出现以下的错误是什么意思: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.原料仓_库存资料我的意思是:我要在一台服务器的数据库上的存储过程调用另一台服务器的数据库上的数据,是怎样在存储过程中用语句实现.
      

  4.   

    应该不会吧 create proc p1 
    as
    ...
    exec sp_addlinkedserver
    exec sp_addlinkedsrvlogin
    .....
    exec sp_droplinkedserver
    ...
      

  5.   

    请参考如下KB:BUG: Cannot use SQL Enterprise Manager to create stored procedures containing linked server objects
    http://support.microsoft.com/kb/296769/en-us
      

  6.   

    我测试了一下: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
    没有报错,是不是存储过程里面有其他问题??
      

  7.   

    跟你说了啊 企业管理器中默认将 ANSI_NULLS设置为OFF 查询分析器中默认将 ANSI_NULLS设置为ON OFF的情况在SP中有涉及链接数据库的语句时不能通过
      

  8.   

    USE pubs GO SELECT a.* FROM OPENROWSET('SQLOLEDB','seattle1';'sa';'MyPass',     'SELECT * FROM pubs.dbo.authors ORDER BY au_lname, au_fname') AS a GO