SQL中访问远程数据库(MSSQL)
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,MSSQL访问远程数据库可以使用三种方式(openrowset/opendatasource/openquery):前提:启用Ad Hoc Distributed Queries1、启用Ad Hoc
千家信息网最后更新 2025年02月02日SQL中访问远程数据库(MSSQL)
MSSQL访问远程数据库可以使用三种方式(openrowset/opendatasource/openquery):
前提:启用Ad Hoc Distributed Queries
1、启用Ad Hoc Distributed Queries服务(这个服务不安全,SqlServer默认是关闭)
2、启用和关闭Ad Hoc Distributed Queries的方法:
若没有启用,会出现以下错误提示:
SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的STATEMENT'OpenRowset/OpenDatasource'的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用sp_configure 启用 'Ad Hoc Distributed Queries'。有关启用 'Ad Hoc Distributed Queries' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。
使用以下语句开启:
exec sp_configure 'show advanced options',1reconfigureexec sp_configure 'Ad Hoc Distributed Queries',1reconfigure
使用完毕使用以下语句关闭(这是一个安全隐患):
exec sp_configure 'Ad Hoc Distributed Queries',0reconfigureexec sp_configure 'show advanced options',0reconfigure
示例:
1、使用创建链接,再使用链接操作的方式/openquery:
--创建链接服务器 exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 ' --查询 select * from ITSV.数据库名.dbo.表名 select * FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') --导入 select * into 表 from ITSV.数据库名.dbo.表名 insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') select * from 本地表 update b set b.列B=a.列B FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') as a inner join 本地表 b on a.列A=b.列A --本地表导入远程表 delete openquery(ITSVA,'select name from 数据库.dbo.表名where id=1') --删除exec sp_dropserver 'ITSV ', 'droplogins ' --以后不再使用时删除链接服务器
2、使用openrowset 连接:
select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) --查询select * into 本地新表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) --远程数据表导入到本地新表(本地新表不存在)insert into 本地旧表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) --从远程数据表导入到本地旧表(本地旧表已经存在)insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) select *from 本地表 --把本地表数据导入到远程数据库表update b set b.列A=a.列A from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b on a.column1=b.column1 --更新本地表数据,设置本地表数据=远程表数据
使用OLEDB:
select * from openrowset('SQLOLEDB','Server=(local);PWD=***;UID=sa;','select * from TB.dbo.school') as tselect * from openrowset('SQLOLEDB','Server=(local);PWD=***;UID=sa;',TB.dbo.school) as tselect * from openrowset('SQLOLEDB','Server=(local);Trusted_Connection=yes;',TB.dbo.school) as tselect * from openrowset('SQLOLEDB','(local)';'sa';'***','select * from TB.dbo.school') as tselect * from openrowset('SQLOLEDB','(local)';'sa';'***',TB.dbo.school) as tselect * from openrowset('SQLOLEDB','(local)';'sa';'***','select school.id as id1,people.id as id2 from TB.dbo.school inner join TB.dbo.people on school.id=people.id') as t
使用SQLNCLI:
select * from openrowset('SQLNCLI','(local)';'sa';'***','select * from TB.dbo.school') as tselect * from openrowset('SQLNCLI','Server=(local);Trusted_Connection=yes;','select * from 数据库.dbo.表名') as tselect * from openrowset('SQLNCLI','Server=(local);UID=sa;PWD=***;','select * from 数据库.dbo.表名') as tselect * from openrowset('SQLNCLI','Server=(local);UID=sa;PWD=***;',数据库.dbo.表名) as tselect * from openrowset('SQLNCLI','Server=(local);UID=sa;PWD=***;DataBase=数据库','select * from dbo.表名') as tinsert openrowset('SQLNCLI','Server=(local);Trusted_Connection=yes;','select name from 数据库.dbo.表名 where id=1') values('ghjkl')/*要不要where都一样,插入一行*/update openrowset('SQLNCLI','Server=(local);Trusted_Connection=yes;','select name from 数据库.dbo.表名 where id=1') set name='kkkkkk'delete from openrowset('SQLNCLI','Server=(local);Trusted_Connection=yes;','select name from 数据库.dbo.表名 where id=1')
3、使用opendatasource:
使用SQLNCLI:
select * from opendatasource('SQLNCLI','Server=(local);UID=sa;PWD=***;').数据库.dbo.表名 as tselect * from opendatasource('SQLNCLI','Server=(local);UID=sa;PWD=***;DataBase=数据库').数据库.dbo.表名 as tinsert opendatasource('SQLNCLI','Server=(local);Trusted_Connection=yes;').TB.dbo.school(name) values('ghjkl')/*要不要where都一样,插入一行*/update opendatasource('SQLNCLI','Server=(local);Trusted_Connection=yes;').TB.dbo.school set name='kkkkkk'delete from opendatasource('SQLNCLI','Server=(local);Trusted_Connection=yes;').TB.dbo.school where id=1
使用OLEDB:
select * from opendatasource('SQLOLEDB','Server=(local);Trusted_Connection=yes;').数据库.dbo.表名 as t select * from OpenDataSource('SQLOLEDB','Data Source=服务器;User ID=sa;Password=******').数据库.dbo.表名 as T
数据
数据库
服务
服务器
密码
用户
用户名
链接
安全
一行
数据表
方式
组件
要不
语句
b.
查询
配置
丛书
信息
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发的形式化方法试题
数据库直接复制一条记录
远程连接认证服务器不可达怎么办
java软件开发论文题目
qt获取数据库中所有数据
网络安全责任田图片
卫计局网络安全风险评估报告
蓟县天气预报软件开发
网络安全夯实日常管理
服务器可以放多少网卡
网络安全靠你我他主题班会
sqloracle数据库应用
网络安全发展成就综述
智脑网络技术服务部
统一软件开发过程博客
高可用性数据库
武汉航空港互联网金融科技园
数据库联系电话的英文
西安软件开发的国企有哪些
是网络安全工程师
网络安全设备日志分析报告
cesium离线地图服务器
安卓数据库软件开发
地下城手游哪个服务器最好
数据库字段怎么增加
网络技术的利和弊
英国做软件开发月薪多少
网络安全法如何确定负责人
微信无法连接到数据库文件夹
网络安全生态峰会 iss