在TSQL语句中访问远程数据库(openrowsetopendatasourceopenquery)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在T-SQL语句中访问远程数据库(openrowset/opendatasource/openquery)
1、启用Ad Hoc Distributed Queries
在利用openrowset/opendatasource前搜先要启用Ad Hoc Distributed Queries效劳,因为那个效劳不平安因此SqlServer默许是关闭的
启用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 联机丛书中的"外围应用配置器"。

启用Ad Hoc Distributed Queries的方式,执行下面的查询语句就能够够了:
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
利用完毕后,记得必然要要关闭它,因为这是一个平安隐患,切记执行下面的SQL语句
exec sp_configure 'Ad Hoc Distributed Queries',0
reconfigure
exec sp_configure 'show advanced options',0
reconfigure
2、利用例如
--创建链接效劳器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程效劳器名或ip地址'
exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名', '密码'
--查询例如
select * from ITSV.数据库名.dbo.表名
--导入例如
select * into 表from ITSV.数据库名.dbo.表名
--以后再也不利历时删除链接效劳器
exec sp_dropserver 'ITSV ', 'droplogins '
--连接远程/局域网数据(openrowset/openquery/opendatasource)
--1、openrowset
--查询例如
select * from openrowset( 'SQLOLEDB ', 'sql效劳器名'; '用户名'; '密码',数据库名.dbo.表名)
--生本钱地表
select * 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
--openquery用法需要创建一个连接
--第一创建一个连接创建链接效劳器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程效劳器名或ip地址'
--查询
select *
FROM openquery(ITSV, 'SELECT * FROM 数据库.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
--3、opendatasource/openrowset
SELECT *
FROM opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登岸名;Password=密码' ).test.dbo.roy_ta
--把本地表导入远程表
insert opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登岸名;Password=密码').数据库.dbo.表名
select * from 本地表
3、自己写的例子
--openrowset利用OLEDB的一些例子
select * from openrowset('SQLOLEDB','Server=(local);PWD=***;UID=sa;','select * from
TB.dbo.school') as t
select * from openrowset('SQLOLEDB','Server=(local);PWD=***;UID=sa;',TB.dbo.school) as t select * from openrowset('SQLOLEDB','Server=(local);Trusted_Connection=yes;',TB.dbo.school) as t
select * from openrowset('SQLOLEDB','(local)';'sa';'***','select * from TB.dbo.school') as t
select * from openrowset('SQLOLEDB','(local)';'sa';'***',TB.dbo.school) as t
select * 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
--openrowset利用SQLNCLI的一些例子(SQLNCLI在SqlServer2005以上才能利用)
select * from openrowset('SQLNCLI','(local)';'sa';'***','select * from TB.dbo.school') as t
select * from openrowset('SQLNCLI','Server=(local);Trusted_Connection=yes;','select * from TB.dbo.school') as t
select * from openrowset('SQLNCLI','Server=(local);UID=sa;PWD=***;','select * from
TB.dbo.school') as t
select * from openrowset('SQLNCLI','Server=(local);UID=sa;PWD=***;',TB.dbo.school) as t select * from openrowset('SQLNCLI','Server=(local);UID=sa;PWD=***;DataBase=TB','select * from dbo.school') as t
--openrowset其他利用
insert openrowset('SQLNCLI','Server=(local);Trusted_Connection=yes;','select name from
TB.dbo.school where id=1') values('ghjkl')/*要不要where都一样,插入一行*/
update openrowset('SQLNCLI','Server=(local);Trusted_Connection=yes;','select name from TB.dbo.school where id=1') set name='kkkkkk'
delete from openrowset('SQLNCLI','Server=(local);Trusted_Connection=yes;','select name from TB.dbo.school where id=1')
--opendatasource利用SQLNCLI的一些例子
select * from opendatasource('SQLNCLI','Server=(local);UID=sa;PWD=***;').TB.dbo.school as t select * from
opendatasource('SQLNCLI','Server=(local);UID=sa;PWD=***;DataBase=TB').TB.dbo.school as t
--opendatasource利用OLEDB的例子
select * from
opendatasource('SQLOLEDB','Server=(local);Trusted_Connection=yes;').TB.dbo.school as t
--opendatasource其他利用
insert 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
--openquery利用OLEDB的一些例子
exec sp_addlinkedserver 'ITSV', '', 'SQLOLEDB','(local)'
exec sp_addlinkedsrvlogin 'ITSV', 'false',null, 'sa', '***'
select * FROM openquery(ITSV, 'SELECT * FROM TB.dbo.school ')
--openquery利用SQLNCLI的一些例子
exec sp_addlinkedserver 'ITSVA', '', 'SQLNCLI','(local)'
exec sp_addlinkedsrvlogin 'ITSVA', 'false',null, 'sa', '***'
select * FROM openquery(ITSVA, 'SELECT * FROM TB.dbo.school ')
--openquery其他利用
insert openquery(ITSVA,'select name from TB.dbo.school where id=1') values('ghjkl')/*要不要where都一样,插入一行*/
update openquery(ITSVA,'select name from TB.dbo.school where id=1') set name='kkkkkk' delete openquery(ITSVA,'select name from TB.dbo.school where id=1')
4、总结
能够看到SqlServer连接多效劳器的方式有3种
其中我个人以为openrowset最好,利用简单而且支持在连接时制定查询语句利用很灵活
openquery也不错查询时也能够指定查询语句利用也很灵活,只是查询前要先用exec
sp_addlinkedserver和exec sp_addlinkedsrvlogin成立效劳器和效劳器连接稍显麻烦opendatasource稍显欠佳,他无法在连接时指定查询利用起来稍显笨拙
另外还能够连接到远程Analysis效劳器做MDX查询,再用T-Sql做嵌套查询,可见T-SQL的远程查询超级壮大
if ($ != jQuery) { $ = jQuery.noConflict(); } var isLogined = false; var cb_blogId = 56368; var cb_entryId = 1689321; var cb_blogApp = "OpenCoder"; var cb_blogUserGuid =
"dc8c8375-b742-de11-9510-001cf0cd104b"; var cb_entryCreatedDate = '2020/3/18 21:07:00';。

相关文档
最新文档