SQL Server 跨服务器操作

Ø  简介

在工作中编写 SQL 时经常会遇到跨库或跨服务器操作,比如查询时,通过 A 服务器的某张表关联 B 服务器某张表,进行连接查询。或者从另一台服务器中的数据,对当前数据库中的数据进行 CRUD 操作;又或者对远程服务器的数据进行 CRUD 操作。本文主要讨论在 SQL Server 中如何结合远程服务器中的数据进行操作,以及常用的几种方法。

 

Ø  首先,模拟以下场景

1.   A服务器(本地)有一张 Score(成绩)表,数据如下:

clip_image001

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.   新建完成后就会出现在链接服务器列表中,如图:

clip_image002

 

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.   结果

clip_image003

 

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);

猜你喜欢

转载自www.cnblogs.com/abeam/p/9188549.html