? 简介
在工作中编写 SQL 时经常会遇到跨库或跨服务器操作,比如查询时,通过 A 服务器的某张表关联 B 服务器某张表,进行连接查询。或者从另一台服务器中的数据,对当前数据库中的数据进行 CRUD 操作;又或者对远程服务器的数据进行 CRUD 操作。本文主要讨论在 SQL Server 中如何结合远程服务器中的数据进行操作,以及常用的几种方法。
? 首先,模拟以下场景
1. A服务器(本地)有一张 Score(成绩)表,数据如下:
2. B 服务器(远程)有一张 Subject(科目)表,结构如下:
CREATE TABLE dbo.Subject
(
SubjectId tinyint NOT NULL, --科目Id
GradeId int NOT NULL, --年级Id
SubjectName nvarchar(25) NOT NULL, --名称
ClassHour smallint NOT NULL --课时
CONSTRAINT PK_Subject_SubjectId PRIMARY KEY CLUSTERED
(
SubjectId ASC
) ON [PRIMARY]
) ON [PRIMARY];
1. 使用链接服务器
? 首先新建链接服务器
1. 代码新建
--创建链接服务器
EXEC sp_addlinkedserver ‘MyServer‘, ‘‘, ‘SQLOLEDB‘, ‘服务器地址‘;
--登录服务器
EXEC sp_addlinkedsrvlogin ‘MyServer‘, ‘false‘, null, ‘sa‘, ‘Password‘;
--查询可用服务器
EXEC sp_helpserver;
--删除链接服务器(使用完记得删除)
EXEC sp_dropserver ‘MyServer‘, ‘droplogins‘;
2. 可视化新建
1) 某数据库服务器 -> 服务器对象 -> 链接服务器 -> 新建链接服务器。
2) 常规:链接服务器(服务器名称随便起) -> 其他数据源 -> 数据源(服务器地址) -> 其他选项可以为空。
3) 安全性:使用此安全上下文建立链接 -> 远程登录(输入 sa) -> 使用密码(输入密码)
3. 新建完成后就会出现在链接服务器列表中,如图:
1) 插入数据
INSERT INTO [MyServer].[Youle0327].[dbo].Subject VALUES
(1, 1, ‘数学‘, 286),(2, 1, ‘语文‘, 278),(3, 1, ‘英语‘, 291),
(5, 2, ‘语文‘, 288),(6, 2, ‘英语‘, 271);
2) 查询数据
1. SQL 代码
SELECT * FROM [MyServer].[Youle0327].[dbo].Subject;
2. 结果
3) 修改数据
UPDATE [MyServer].[Youle0327].[dbo].Subject SET SubjectName=‘物理‘ WHERE SubjectId=6;
4) 删除数据
DELETE FROM [MyServer].[Youle0327].[dbo].Subject;
2. 使用 OPENROWSET() 函数
1) 插入数据
INSERT INTO OPENROWSET(‘SQLOLEDB‘, ‘服务器地址‘; ‘sa‘; ‘Password‘, Youle0327.dbo.Subject) VALUES
(1, 1, ‘数学‘, 286),(2, 1, ‘语文‘, 278),(3, 1, ‘英语‘, 291),
(5, 2, ‘语文‘, 288),(6, 2, ‘英语‘, 271);
2) 查询数据
SELECT * FROM OPENROWSET(‘SQLOLEDB‘, ‘服务器地址‘; ‘sa‘; ‘Password‘, Youle0327.dbo.Subject);
3) 修改数据
UPDATE OPENROWSET(‘SQLOLEDB‘, ‘服务器地址‘; ‘sa‘; ‘Password‘, Youle0327.dbo.Subject) SET SubjectName=‘物理‘ WHERE SubjectId=6;
4) 删除数据
DELETE FROM OPENROWSET(‘SQLOLEDB‘, ‘服务器地址‘; ‘sa‘; ‘Password‘, Youle0327.dbo.Subject);
原文地址:https://www.cnblogs.com/abeam/p/9188549.html