数据库在不同的服务器上,数据库A保存着单位ID和单位名称,数据库B的有个表有单位ID等其他字段,我想通过数据库B的单位ID返回单位名称及及其他字段的记录集,用一条sql语句能做到么?
如果用存储过程,该如何做呢?

解决方案 »

  1.   

    开启连接服务器,然后:
    select * from 服务器B.数据库B.dbo.表名 这样来访问B库中的表,但是跨服务器查询往往性能都不高
      

  2.   

    用链接服务器(link server),
    参考 http://msdn.microsoft.com/en-us/library/aa560998.aspx
      

  3.   


    存储过程性能能否好点性能都一样。 可以直接用SQL实现,也可以先创建链接服务器
      

  4.   

    直接用SQL连接就写
    SELECT    *
    FROM       openrowset('MSDASQL',
       'DRIVER={SQL Server};SERVER=服务器B的IP地址;UID=sa;PWD=sa',
       库名.dbo.表名)
    这样可以在服务器A的任意新建查询里面查询服务器B的某库的某表使用链接服务器就先创建服务器B的链接
      

  5.   

    放在同一个实例上直接用
    select * from 数据库B.dbo.表名来访问就可以了
      

  6.   

    先在B数据库上建立一个DB LINK,连接到数据库A.在线指导:
    http://item.taobao.com/item.htm?spm=686.1000925.1000774.23.nFGG8X&id=27406928729
      

  7.   

    EXEC sp_configure 'show advanced options', 1; 
    GO
    RECONFIGURE
    GO
    EXEC sp_configure 'Ad Hoc Distributed Queries', 1
    GO
    RECONFIGURE
    GO
    SELECT * INTO #T1 FROM
    OPENROWSET('SQLOLEDB' ,'SERVER=1.1.1.1,1433;UID=sa;PWD=123456','SELECT * FROM test.dbo.test') A--或者是(前提是建立好linkserver)
    SELECT * FROM [1.1.1.1].test.dbo.test
      

  8.   


    --建立链接服务器,通过@datasrc指定数据源,适合链接其他多种数据库
    EXEC master.dbo.sp_addlinkedserver @server = N'remote_link',  --链接名称
                                       @srvproduct='ms', 
                                       @provider=N'SQLNCLI',                                    
                                       @datasrc=N'192.168.1.16,1433' --远程服务器的ip和端口EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'Link',
                                        @useself=N'False',
                                        @locallogin=NULL,
                                        @rmtuser=N'sa',          --远程服务器的用户名
                                        @rmtpassword='password'--远程服务器的密码
                                        --在本地执行的语句,一般是把远程的表加载到本地,然后进行关联操作
    --也就是说是在本地进行的关联操作,适合本地的记录数大于远程的表
    select *
    from 数据库名称.dbo.表名 a
    inner join [remote_link].数据库名称.dbo.表名 b
            on a.关联字段 = b.关联字段
    --另外,有个查询提示需要注意 remote   
    --关联操作会在远程服务器进行,本地表的记录会加载到远程,
    --适合远程表的记录数较多,而本地记录数较小     
    select *
    from 数据库名称.dbo.表名 a
    inner remote join [remote_link].数据库名称.dbo.表名 b
                   on a.关联字段 = b.关联字段        先试试看性能如何。