通过sql SELECT * FROM sys.servers能够查询服务器所拥有的所有链接服务器对象,想继续通过使用sql查询每个链接服务器上所有的数据库、用户的表,有对应的sql语句么?非常感谢!!!

解决方案 »

  1.   

    --创建链接服务器   
    exec   sp_addlinkedserver       'ITSV   ',   '   ',   'SQLOLEDB   ',   '远程服务器名或ip地址   '   
    exec   sp_addlinkedsrvlogin     'ITSV   ',   'false   ',null,   '用户名   ',   '密码   '   --查询示例   
    select   *   from   ITSV.数据库名.dbo.表名   --导入示例   
    select   *   into   表   from   ITSV.数据库名.dbo.表名   --以后不再使用时删除链接服务器   
    exec   sp_dropserver     'ITSV   ',   'droplogins   '   --连接远程/局域网数据(openrowset/openquery/opendatasource)   
    --1、openrowset   --查询示例   
    select   *   from   openrowset(   'SQLOLEDB   ',   'sql服务器名   ';   '用户名   ';   '密码   ',数据库名.dbo.表名)   --生成本地表   
    select   *   into   表   from   openrowset(   'SQLOLEDB   ',   'sql服务器名   ';   '用户名   ';   '密码   ',数据库名.dbo.表名)   --把本地表导入远程表   
    insert   openrowset(   'SQLOLEDB   ',   'sql服务器名   ';   '用户名   ';   '密码   ',数据库名.dbo.表名)   
    select   *from   本地表   --更新本地表   
    update   b   
    set   b.列A=a.列A   
      from   openrowset(   'SQLOLEDB   ',   'sql服务器名   ';   '用户名   ';   '密码   ',数据库名.dbo.表名)as   a   inner   join   本地表   b   
    >exec sp_addlinkedserver @server=’别名’,@provider=’sqloledb’,@srvproduct=’’,@datasrc=’远程服务器IP’  远程注册成功:(亲测) --exec sp_addlinkedserver '注册名','','SQLOLEDB','远程数据库名' 
    --exec sp_addlinkedsrvlogin '注册名','false',null,'用户名','密码' 
    --go 
      

  2.   

    非常感谢!
    但可能您理解错了,我的意思是希望使用sql语句查询链接服务器所有的拥有的数据库、用户和表,不是查询链接服务器上的数据,我仅仅是想获得链接服务器上现在有多少个数据库,每个数据库的名字是什么。
      

  3.   


    SELECT * FROM [链接服务器名称].[数据库名].sys.objects然后根据type字段的值,分别对应不同数据库对象,具体自己看下MSDN好了。
      

  4.   

    仅供参考:
    链接服务器的所有数据库:SELECT * FROM [链接服务器名称].[数据库名称].sys.databases链接服务器的所有用户:SELECT * FROM [链接服务器名称].[数据库名称].sys.syslogins
    SELECT * FROM [链接服务器名称].[数据库名称].sys.sysremotelogins
    SELECT * FROM [链接服务器名称].[数据库名称].sys.sysoledbusers
    SELECT * FROM [链接服务器名称].[数据库名称].sys.sysusers链接服务器的所有表:SELECT * FROM [链接服务器名称].[数据库名称].sys.sysobjects WHERE xtype='U'