SQL Server如何啟用Ad Hoc Distributed Queries?
SQL Server數(shù)據(jù)庫遠(yuǎn)程操作中,在使用openrowset/opendatasource前首先要啟用Ad Hoc Distributed Queries服務(wù),因?yàn)檫@個(gè)服務(wù)不安全所以SqlServer默認(rèn)是關(guān)閉的。
1、啟用Ad Hoc Distributed Queries的方法
SQL Server 阻止了對(duì)組件'Ad Hoc Distributed Queries' 的STATEMENT'OpenRowset/OpenDatasource'的訪問,因?yàn)榇私M件已作為此服務(wù)器安全配置的一部分而被關(guān)閉。系統(tǒng)管理員可以通過使用。sp_configure 啟用 'Ad Hoc Distributed Queries'。
啟用Ad Hoc Distributed Queries的方法,執(zhí)行下面的查詢語句就可以了:
- exec sp_configure 'show advanced options',1
- reconfigure
- exec sp_configure 'Ad Hoc Distributed Queries',1
- reconfigure
使用完畢后,記得一定要關(guān)閉它,因?yàn)檫@是一個(gè)安全隱患,切記執(zhí)行下面的SQL語句:
- exec sp_configure 'Ad Hoc Distributed Queries',0
- reconfigure
- exec sp_configure 'show advanced options',0
- reconfigure
2、使用示例
創(chuàng)建鏈接服務(wù)器
- exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '遠(yuǎn)程服務(wù)器名或ip地址 '
- exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用戶名 ', '密碼 '
查詢示例
- select * from ITSV.數(shù)據(jù)庫名.dbo.表名
導(dǎo)入示例
- select * into 表 from ITSV.數(shù)據(jù)庫名.dbo.表名
以后不再使用時(shí)刪除鏈接服務(wù)器
- exec sp_dropserver 'ITSV ', 'droplogins '
3、連接遠(yuǎn)程/局域網(wǎng)數(shù)據(jù)(openrowset/openquery/opendatasource)
1、openrowset
查詢示例
- select * from openrowset( 'SQLOLEDB ', 'sql服務(wù)器名 '; '用戶名 '; '密碼 ',數(shù)據(jù)庫名.dbo.表名)
生成本地表
- select * into 表 from openrowset( 'SQLOLEDB ', 'sql服務(wù)器名 '; '用戶名 '; '密碼 ',數(shù)據(jù)庫名.dbo.表名)
把本地表導(dǎo)入遠(yuǎn)程表
- insert openrowset( 'SQLOLEDB ', 'sql服務(wù)器名 '; '用戶名 '; '密碼 ',數(shù)據(jù)庫名.dbo.表名)
- select *from 本地表
更新本地表
- update b
- set b.列A=a.列A
- from openrowset( 'SQLOLEDB ', 'sql服務(wù)器名 '; '用戶名 '; '密碼 ',數(shù)據(jù)庫名.dbo.表名)as a inner join 本地表 b
- on a.column1=b.column1
openquery用法需要?jiǎng)?chuàng)建一個(gè)連接。
首先創(chuàng)建一個(gè)連接創(chuàng)建鏈接服務(wù)器
- exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '遠(yuǎn)程服務(wù)器名或ip地址 '
查詢
- select * FROM openquery(ITSV, 'SELECT * FROM 數(shù)據(jù)庫.dbo.表名 ')
把本地表導(dǎo)入遠(yuǎn)程表
- insert openquery(ITSV, 'SELECT * FROM 數(shù)據(jù)庫.dbo.表名 ')
- select * from 本地表
更新本地表
- update b
- set b.列B=a.列B
- FROM openquery(ITSV, 'SELECT * FROM 數(shù)據(jù)庫.dbo.表名 ') as a
- inner join 本地表 b on a.列A=b.列A
2、opendatasource/openrowset
- SELECT * FROM opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陸名;Password=密碼 ' ).test.dbo.roy_ta
把本地表導(dǎo)入遠(yuǎn)程表:
- insert opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陸名;Password=密碼 ').數(shù)據(jù)庫.dbo.表名
- select * from 本地表
關(guān)于SQL Server數(shù)據(jù)庫中使用T-SQL語句訪問遠(yuǎn)程數(shù)據(jù)庫的操作就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!
【編輯推薦】


2010-12-30 11:13:36




