Microsoft® SQL Server 实现分布式查询

分布式查询可以访问来自多种异类数据源的数据,而这些数据可存储在相同或不同的计算机上。
 
Microsoft SQL Server 通过使用 OLE DB(Microsoft 通用数据访问应用程序接口 (API) 规范)支持分布式查询。
 
此"分布式查询"部分讨论一般的分布式查询概念,并描述如何在分布式查询中使用 Transact-SQL 语句访问单独的 SQL Server 实例上的数据或非 SQL Server 数据源。
 
分布式查询支持 SQL Server 用户访问: 存储在多个 SQL Server 实例中的分布式数据。存储在各种可使用 OLE DB 提供程序访问的关系和非关系数据源中的异类数据。
 
OLE DB 提供程序将数据表现在称为行集的表格格式对象中。SQL Server 2000 允许在 Transact-SQL 语句中象引用 SQL Server 表一样引用 OLE DB行集。
 
可以在 SELECT、INSERT、UPDATE 和 DELETE Transact-SQL 语句中直接引用外部数据源中的表和视图。因为分布式查询使用 OLE DB 作为基础接口,所以它们不仅可以访问使用   SQL 查询处理器的传统关系数据库管理系统 (DBMS),而且还能访问由不同功能和完善度的数据源所管理的数据。只要拥有数据的软件通过 OLE DB 提供程序在表格格式行集中表现其数据,就可在分布式查询中使用该数据。
 
SQL Server 支持以下用于实现和管理分布式查询的系统存储过程:
 
  创建链接服务器。链接服务器让用户可以对 OLE DB 数据源进行分布式异类查询。在使用 sp_addlinkedserver 创建链接服务器后,可对该服务器运行分布式查询。如果链接服务器定义为 SQL Server 实例,则可执行远程存储过程。
  语法:
sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ]
[ , [ @provider= ] 'provider_name' ]
[ , [ @datasrc= ] 'data_source' ]
[ , [ @location= ] 'location' ]
[ , [ @provstr= ] 'provider_string' ]
[ , [ @catalog= ] 'catalog' ]
 

  创建或更新 SQL Server 本地实例上的登录名与远程服务器中安全帐户之间的映射。

  语法:

sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname'
[ , [ @useself = ] 'TRUE' | 'FALSE' | NULL ]
[ , [ @locallogin = ] 'locallogin' ]
[ , [ @rmtuser = ] 'rmtuser' ]
[ , [ @rmtpassword = ] 'rmtpassword' ]
 
  删除运行 SQL Server 的本地服务器上的登录与链接服务器上的登录之间的现有映射。
  语法:
sp_droplinkedsrvlogin [ @rmtsrvname= ] 'rmtsrvname' ,
[ @locallogin= ] 'locallogin'
 
 
  从本地 SQL Server 实例中的已知远程服务器和链接服务器的列表中删除服务器。
  语法:
sp_dropserver [ @server = ] 'server'
[ , [ @droplogins = ] { 'droplogins' | NULL} ]
 
使用示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
-- 判断本地 SQL Server 实例中 ITSV_EWangOA 链接服务器是否存在
IF EXISTS (SELECT * FROM [sys].[servers] WHERE ([name] = N'ITSV_EWangOA'))
BEGIN
    -- 删除默认的登录映射,最初在本地服务器 ITSV_EWangOA 上通过执行 sp_addlinkedserver 而创建了这个默认的登录映射
    EXEC [sys].[sp_droplinkedsrvlogin]
        @rmtsrvname = ITSV_EWangOA,
        @locallogin = NULL
     
    -- 从本地 SQL Server 实例删除链接服务器 ITSV_EWangOA 以及所有关联的远程登录名
    EXEC [sys].[sp_dropserver]
        @server = ITSV_EWangOA
END
GO
 
-- 使用 SQL Server Native Client OLE DB 访问接口在 SQL Server 实例中创建链接服务器 ITSV_EWangOA。
EXEC [sys].[sp_addlinkedserver]
    @server = ITSV_EWangOA,
    @srvproduct = N'',
    @provider = N'SQLOLEDB',
    @datasrc = N'192.168.0.200,45124'
GO
     
-- 创建一个映射,以确保使用登录名 MaryP 和密码 d89q3w4u 连接到链接服务器 ITSV_EWangOA。
EXEC [sys].[sp_addlinkedsrvlogin]
    @rmtsrvname = ITSV_EWangOA,
    @useself = N'false',
    @rmtuser = N'MaryP',
    @rmtpassword = N'd89q3w4u'
GO
 
-- 设置 ITSV_EWangOA 链接服务器启用 RPC
EXEC [sys].[sp_serveroption]
    @server = ITSV_EWangOA,
    @optname = N'rpc',
    @optvalue = N'true'
GO
 
-- 设置 ITSV_EWangOA 链接服务器启用 RPC
EXEC [sys].[sp_serveroption]
    @server = ITSV_EWangOA,
    @optname = N'rpc out',
    @optvalue = N'true'
GO
 
-- 返回本地服务器中定义的链接服务器列表
EXEC [sys].[sp_linkedservers]
GO
 
-- 在链接服务器上执行一个简单的 SELECT 语句
EXEC(
    'SELECT * FROM [EWangOA].[dbo].[OA_User] WHERE ([uid] = ?) AND ([username] = ?)', 10001, N'solitary'
) AT [ITSV_EWangOA]
GO

posted on   Solitary  阅读(554)  评论(0编辑  收藏  举报

编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 上周热点回顾(1.20-1.26)
点击右上角即可分享
微信分享提示