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].[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

时间: 2024-08-28 08:10:53

SQL Server 跨服务器操作的相关文章

问题:sqlserver 跨服务器连接;结果:Sql Server 跨服务器连接

Sql Server 跨服务器连接 用openrowset连接远程SQL或插入数据 --如果只是临时访问,可以直接用openrowset --查询示例 select * from openrowset('SQLOLEDB', 'sql服务器名'; '用户名'; '密码', 数据库名.dbo.表名) --导入示例 select * into 表 from openrowset('SQLOLEDB' ,'sql服务器名';'用户名';'密码' ,数据库名.dbo.表名) --创建链接服务器 exec

Sql server 跨服务器连接数据库

select * from opendatasource('SQLOLEDB' , 'Data Source=172.27.xxx.xxx; User ID=Admin;Password=xxx').[数据库名].dbo.表名 备注:数据名的中括号和dbo一定要写,不然找不到 Sql server 跨服务器连接数据库

SQL Server 跨服务器发布/订阅

------------------------------------------------第一步: 准备工作------------------------------------------------ 准备工作1: 配置机器名和数据库服务名一致 先检查A,B中的机器名和数据库服务名是否一致,这个很重要! 查看方法: 1.检查SQL Server 的服务器名称 1 2 3 4 use master go select @@servername select serverproperty(

Sql Server 跨服务器连接

from:https://www.cnblogs.com/railgunman/archive/2010/12/25/1916780.html 用openrowset连接远程SQL或插入数据 --如果只是临时访问,可以直接用openrowset --查询示例 select * from openrowset('SQLOLEDB', 'sql服务器名'; '用户名'; '密码', 数据库名.dbo.表名) --导入示例 select * into 表 from openrowset('SQLOLE

SQL Server 跨服务器同步或定时同步数据库

在本地局域网内或者外网有两台安装有sqlserver2008的机器(注意:已发布的快照版本无法向老版本数据库兼容,意味着2008下创建的事务或快照发布,无法被sqlserver2005订阅) 1.在要发布的数据库上创建一个数据库(这里叫做dnt_new),然后在该数据库实例的左侧导航的"复制"--"本地发布"上击右键,然后选择"新建发布",如下: <ignore_js_op> 这样,系统就会启动'发布向导'来引导大家,点击"

SQL Server跨服务器的数据库迁移

1. 使用sql server task中back up 任务,保存为*.bak 文件. 2. 在另一个server中restore database,如果已经存在这个database,会覆盖之前的数据.如果不存在,会创建一个同名数据库. 期间出现的问题: 登录用户失去访问权限,使用以下命令: Alter user name with login login_name    login_name 是登录server的账号,name是失去访问此数据库权限的用户.

SQL Server跨服务器之间访问

在两个服务器都需要启用Ad Hoc Distributed Queries: EXEC sp_configure 'show advanced options', 1 RECONFIGURE EXEC sp_configure 'Ad Hoc Distributed Queries', 1 RECONFIGURE 然后就可以使用SQL内置函数访问: SELECT  * FROM    OPENDATASOURCE('SQLOLEDB', 'Data Source=111.111.113.41;U

SQL Server跨服务器查询

来源:https://www.cnblogs.com/tylerflyn/p/8339895.html 创建链接服务器 exec sp_addlinkedserver 'ITSV', ' ', 'SQLOLEDB', '远程服务器名或ip地址' exec sp_addlinkedsrvlogin 'ITSV', 'false ',null, '用户名', '密码' --查询示例 select * from ITSV.数据库名.dbo.表名 --导入示例 select * into 表 from

Sql Server跨服务器操作数据

var serversSql = "select count(*) count from sys.servers WHERE name='ITSV'"; var result = BaseSqlHelper.ExecuteScalar(serversSql); if (result.ToString() == "0") { var addServersSql = "exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLED