SQL Server 跨服务器操作
Posted Abeam
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server 跨服务器操作相关的知识,希望对你有一定的参考价值。
Ø 简介
在工作中编写 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].[DbName].[dbo].Subject VALUES
(1, 1, \'数学\', 286),(2, 1, \'语文\', 278),(3, 1, \'英语\', 291),
(5, 2, \'语文\', 288),(6, 2, \'英语\', 271);
2) 查询数据
1. SQL 代码
SELECT * FROM [MyServer].[DbName].[dbo].Subject;
2. 结果
3) 修改数据
UPDATE [MyServer].[DbName].[dbo].Subject SET SubjectName=\'物理\' WHERE SubjectId=6;
4) 删除数据
DELETE FROM [MyServer].[DbName].[dbo].Subject WHERE SubjectId=6;
2. 使用 OPENQUERY() 函数
使用 OPENQUERY() 函数前,同样需要新建一个链接服务器,并向 OPENQUERY() 函数指定将使用的链接服务器。
1)& 以上是关于SQL Server 跨服务器操作的主要内容,如果未能解决你的问题,请参考以下文章 sql server service broker中调用存储过程执行跨库操作,不管怎么设置都一直提示 服务器主体 "sa" 无法在当前安全上下文下访问数据库 "dbnam