千家信息网

SQL中访问远程数据库(MSSQL)

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,MSSQL访问远程数据库可以使用三种方式(openrowset/opendatasource/openquery):前提:启用Ad Hoc Distributed Queries1、启用Ad Hoc
千家信息网最后更新 2026年11月03日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安全错误 数据库的锁怎样保障安全 互联网科技 上海互联网科技有限公司 浩特互联网科技 科技创新互联网企业 上海致骋互联网科技 新浪科技互联网 互联网 视角下的科技创新 科技类的互联网平台 互联网科技产品 来此购互联网科技有限公司 辽宁互联网新科技 呼和浩特新华互联网科技学院 迪庆互联网科技招生 互联网科技公司营业执照怎么办理 科技互联网海报 科技互联网的核心竞争力 梅州GM互联网络科技有限公司 上海创道互联网络科技有限公司 互联网科技博主张洲 平安好医生打造互联网科技医疗 互联网科技公司税收优惠 工业互联网科技新基建 互联网最新的科技有限公司 无锡溥仪互联网科技有限公司 华脉科技工业互联网产品 汽车互联网创新科技园 武汉健翔互联网络科技有限公司 互联网科技与大数据专业 宁波跨境商互联网科技有限公司 艺电能源互联网科技有限公司招聘
0