凌峰创科服务平台

SQL Server跨服务器查询如何实现?

SQL Server 跨服务器查询指南

跨服务器查询是指在一个 SQL Server 实例中查询另一个 SQL Server 实例(或不同类型的数据库服务器)中的数据,以下是几种实现跨服务器查询的主要方法:

SQL Server跨服务器查询如何实现?-图1
(图片来源网络,侵删)

使用链接服务器 (Linked Server)

链接服务器是 SQL Server 提供的最常用的跨服务器查询方法。

创建链接服务器

-- 使用 T-SQL 创建链接服务器
EXEC sp_addlinkedserver 
    @server = '远程服务器名', 
    @srvproduct = '', 
    @provider = 'SQLNCLI', -- 或 'SQLOLEDB' 用于旧版本
    @datasrc = '远程服务器地址';
-- 设置登录映射
EXEC sp_addlinkedsrvlogin 
    @rmtsrvname = '远程服务器名', 
    @useself = 'false', 
    @locallogin = NULL, -- 或指定特定本地登录
    @rmtuser = '远程用户名', 
    @rmtpassword = '远程密码';

使用链接服务器查询

-- 四部分名称查询: [服务器名].[数据库名].[架构名].[表名]
SELECT * FROM [远程服务器名].[远程数据库名].[dbo].[表名];
-- 使用 OPENQUERY
SELECT * FROM OPENQUERY([远程服务器名], 'SELECT * FROM [远程数据库名].[dbo].[表名]');
-- 使用 OPENROWSET
SELECT * FROM OPENROWSET(
    'SQLNCLI', 
    'Server=远程服务器地址;UID=用户名;PWD=密码;',
    'SELECT * FROM [远程数据库名].[dbo].[表名]'
);

使用 OPENDATASOURCE

SELECT * FROM OPENDATASOURCE(
    'SQLNCLI',
    'Data Source=远程服务器地址;User ID=用户名;Password=密码'
).[远程数据库名].[dbo].[表名];

使用分布式查询

-- 首先创建链接服务器(同上),然后使用分布式查询
SELECT a.*, b.* 
FROM [本地服务器].[本地数据库].[dbo].[本地表] a
JOIN [远程服务器].[远程数据库].[dbo].[远程表] b ON a.ID = b.ID;

使用分布式事务

如果需要跨服务器执行事务操作:

BEGIN DISTRIBUTED TRANSACTION;
-- 执行跨服务器操作
UPDATE [本地服务器].[本地数据库].[dbo].[表1] SET ...
UPDATE [远程服务器].[远程数据库].[dbo].[表2] SET ...
COMMIT TRANSACTION;
-- 或 ROLLBACK TRANSACTION;

注意事项

  1. 权限设置:确保远程服务器上有适当的权限
  2. 网络连接:确保两台服务器之间网络畅通
  3. 性能考虑:跨服务器查询会增加网络开销,尽量减少数据传输量
  4. 安全性:避免在连接字符串中硬编码密码,考虑使用安全凭据
  5. 防火墙:确保SQL Server端口(默认1433)在防火墙中开放

管理链接服务器

-- 查看所有链接服务器
SELECT * FROM sys.servers;
-- 删除链接服务器
EXEC sp_dropserver @server = '远程服务器名', @droplogins = 'droplogins';

选择哪种方法取决于您的具体需求、安全要求和环境配置,链接服务器是最灵活和常用的方法,而 OPENDATASOURCE 更适合临时查询。

SQL Server跨服务器查询如何实现?-图2
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇