SQL Server链接服务器的创建与使用

sql server 实现跨数据库访问

这几天做项目遇到的问题,困扰我一整天。终于解决了,必须拿小本本记下了。

先放个代码

--以后不再使用时删除链接服务器   
exec sp_droplinkedsrvlogin 'QCDB1',null   
exec sp_dropserver 'QCDB1'  
--建立连接

EXEC  sp_addlinkedserver
@server='QCDB1',          --链接服务器别名
@srvproduct='1433',
@provider='SQLOLEDB',
@datasrc='192.168.8.9'      --要访问的的数据库所在的服务器的ip
GO
EXEC sp_addlinkedsrvlogin
'QCDB1',                  --链接服务器别名
'false', 
 NULL,
'admin',                        --要访问的数据库的用户              
'123654789'                        --要访问的数据库,用户的密码
GO
select * from [QCDB1].[QCDB].[dbo].Examine

其中,"链接服务器别名"随便取, 只需修改 "要访问的的数据库所在的服务器的ip"

,“用户”和“密“码 (我用的要访问的sql sever数据库sa账号和密码)。

成功执行后,刷新SSMS左侧链接服务器,会出现新建的链接服务器

 SQL Server链接服务器的创建与使用_第1张图片

使用的格式:SELECT * FROM [链接服务器别名].[数据库名].[dbo].[表名]如:select * from [QCDB1].[QCDB].[dbo].Examine

需要注意的是,使用update去更新表数据时,sql语句前面要加上一个

SET XACT_ABORT on 

否则会报错。如:

SET XACT_ABORT ON 
		update [QCDB1].[QCDB].[dbo].Examine set result='成功'
		where SCId=123

这个是设置事务回滚的,默认为OFF
当为ON时,如果你存储中的某个地方出了问题,整个事务中的语句都会回滚
为OFF时,只回滚错误的地方,语句继续执行(很危险!dalao说的)

删除链接服务器语法

--第一个参数是要删除的链接服务器;第二个参数作用是连带删除该链接服务器登录映射

exec sp_dropserver '链接服务器名称', 'droplogins '

使用链接服务器UPDATE比较慢的原因:

--链接服务器和本地服务器关联表更新
UPDATE 链接服务器.数据库名.dbo.表名
SET 列名1= **,列名2=**
where 主键列 in (select 列名 from 本地表)

--将本地服务器表的列内容取出后直接更新
UPDATE 链接服务器.数据库名.dbo.表名
SET 列名1= **,列名2=**
where 主键列 in (1,2,3,4,5,6)

第一个查询 基本上半个小时出不来数据
第二个一秒不到就出来了

 


--下面语句直接查询也是很快的基本不到一秒
select * from 链接服务器.数据库名.dbo.表名
where 主键列 in (select 列名 from 本地表)

因为update是要依次写入日志的,而select 一次查询出结果。能尽量避免这样就尽量避免,如果真的遇到这种情况,最好分两步做先查询出数值,再去更新,就会快很多了。

SQL Server链接服务器的创建与使用_第2张图片

 哈哈哈哈哈哈~~快乐的程序猿呀!

你可能感兴趣的:(小白手册,#,数据库)