sql数据库跨服务器连接查询浅析

发布时间:2020-06-28编辑:脚本学堂
有关sql server数据库跨服务器查询的方法,sql数据库通过链接服务器查询数据的方法,有需要的朋友参考下。

sql数据库服务器连接查询

在sql server数据库中跨服务器查询都是在先建立链接服务器的基础上,如果不建立链接服务器可以直接用SQL查询跨服务器的Table吗?

如果不建立链接服务器可以查询跨服务器的系统表吗?当然可以!

在sql2008和sql2000可以跨服务器连接查询的测试实例中各实例对应的sa如何不相同,建立链接服务器后仍无法查询系统表,因此这里强调可以查询跨服务器的系统表,并介绍下使用方法。

环境:
目标服务器SERV1,IP地址10.0.0.250,数据库INTER,架构名DBO 。

目的:
在本地服务器查询目标服务器上的INTER数据库的表logdb。
 

脚本一:
查询服务器SERV1上INTER数据库的表logdb并返回前十行
 

复制代码 代码示例:
select top 10 *
from opendatasource ( 'SQLOLEDB'
, 'Data Source=10.0.0.250;User ID=sa;PASSWORD=sa 密码 ;' )   -- 输入目标服务器地址(原因请见《如何方便的建立远程链接服务器》)
-- 输入 sa 帐号及密码
. [INTER] . dbo . logdb
 

 
如果结果 集 返回类似如下结果:
链接服务器"(null)"的 OLE DB 访问接口 "SQLNCLI10" 返回了消息 "登录超时已过期"。
链接服务器"(null)"的 OLE DB 访问接口 "SQLNCLI10" 返回了消息 "与 SQL Server 建立连接时发生了与网络相关的或特定于实例的错误。找不到或无法访问服务器。请检查实例名称是否正确以及 SQL Server 是否配置为允许远程连接。有关详细信息,请参阅 SQL Server 联机丛书。"。
消息 53,级别 16,状态 1,第 0 行
命名管道提供程序: 无法打开与 SQL Server 的连接 [53].

请检查并确认输入的目标服务器地址及SA密码是否正确!
如果结果 集 返回类似如下结果:

消息 7314 ,级别 16 ,状态 1 ,第 1 行

链接服务器 "(null)" 的 OLE DB 访问接口 "SQLNCLI10" 不包含表 ""INTERFACEDATA"."dbo"."logdb"" 。该表不存在,或者当前用户没有访问该表的权限。

请检查并确认输入的表名是否正确!

脚本二:
这里假设输入的表名是错的,但不记得正确的表名是什么。此时通常会查询sys.objects是否存在该表并确认名称。
查询服务器SERV1上INTER数据库中是否存在表 db log并返回正确的表名
 

复制代码 代码示例:
select NAME
from opendatasource ( 'SQLOLEDB'
, 'Data Source=10.0.0.250;User ID=sa;PASSWORD=sa 密码 ;' )
. [INTER] . [SYS] . [OBJECTS] -- 查询目标服务器的系统表
where TYPE = 'U' and NAME LIKE '%log' -- 查询用户表以 “log” 结尾的表名
ORDER BY 1  -- 按 NAME 排序

Posted by: select left('claro',2) @10:27:00
lable: SQL