国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

在T-SQL語句中訪問遠程數據庫(openrowset/opendatasource/openquery)

2024-07-21 02:47:57
字體:
來源:轉載
供稿:網友
在T-SQL語句中訪問遠程數據庫(openrowset/opendatasource/openquery)

1.openrowset/opendatasource使用

在使用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',1reconfigureexec sp_configure 'Ad Hoc Distributed Queries',1reconfigure

使用完畢后,記得一定要要關閉它,因為這是一個安全隱患,切記執行下面的SQL語句

exec sp_configure 'Ad Hoc Distributed Queries',0reconfigureexec sp_configure 'show advanced options',0reconfigure 

2、openrowset/opendatasource使用示例

--連接遠程/局域網數據(openrowset/opendatasource) --1、openrowset --openrowset使用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--openrowset使用SQLNCLI的一些例子(SQLNCLI在SqlServer2005以上才能使用)select * from openrowset('SQLNCLI','(local)';'sa';'***','select * from TB.dbo.school') as tselect * from openrowset('SQLNCLI','Server=(local);Trusted_Connection=yes;','select * from TB.dbo.school') as tselect * from openrowset('SQLNCLI','Server=(local);UID=sa;PWD=***;','select * from TB.dbo.school') as tselect * from openrowset('SQLNCLI','Server=(local);UID=sa;PWD=***;',TB.dbo.school) as tselect * 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')--2、opendatasource--opendatasource使用SQLNCLI的一些例子select * from opendatasource('SQLNCLI','Server=(local);UID=sa;PWD=***;').TB.dbo.school as tselect * 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

3、openquery使用

先執行EXEC sp_addlinkedserver創建遠程服務器的鏈接,再執行Exec sp_droplinkedsrvlogin登錄鏈接上的遠程服務器,之后就可以執行各種sql操作了。

--EXEC sp_addlinkedserver --@server='ZYB',--被訪問的服務器別名 --@srvPRoduct='', --@provider='SQLOLEDB', --@datasrc="/Server2" --要訪問的服務器 --EXEC sp_addlinkedsrvlogin --'ZYB', --被訪問的服務器別名 --'false', --NULL, --'sa', --帳號 --'sa' --密碼 --Exec sp_droplinkedsrvlogin ZYB,Null --刪除映射(錄與鏈接服務器上遠程登錄之間的映射) --Exec sp_dropserver ZYB --刪除遠程服務器鏈接 

4、openquery使用示例

--openquery使用OLEDB的一些例子exec sp_addlinkedserver   'ITSV', '', 'SQLOLEDB','(local)' exec sp_addlinkedsrvlogin 'ITSV', 'false',null, 'sa', '***'select * FROM openquery(ITSV,  'SELECT *  FROM TB.dbo.school ') exec sp_droplinkedsrvlogin ITSV,Nullexec sp_dropserver ITSV--openquery使用SQLNCLI的一些例子exec sp_addlinkedserver   'ITSVA', '', 'SQLNCLI','(local)' exec sp_addlinkedsrvlogin 'ITSVA', 'false',null, 'sa', '***'select * FROM openquery(ITSVA,  'SELECT *  FROM TB.dbo.school ') exec sp_droplinkedsrvlogin ITSVA,Nullexec sp_dropserver ITSVA

另外一種方法,是直接使用創建的鏈接別名:

exec sp_addlinkedserver   'ITSV', '', 'SQLOLEDB','(local)' exec sp_addlinkedsrvlogin 'ITSV', 'false',null, 'sa', '***'select * FROM ITSV.TB.dbo.schoolexec sp_droplinkedsrvlogin ITSV,Nullexec sp_dropserver ITSV

5、總結

可以看到SqlServer連接多服務器的方式有3種

其中我個人認為openrowset最好,使用簡單而且支持在連接時制定查詢語句使用很靈活

openquery也不錯查詢時也可以指定查詢語句使用也很靈活,不過查詢前要先用exec sp_addlinkedserver和exec sp_addlinkedsrvlogin建立服務器和服務器連接稍顯麻煩

opendatasource稍顯欠佳,他無法在連接時指定查詢使用起來稍顯笨拙

另外還可以連接到遠程Analysis服務器做MDX查詢,再用T-Sql做嵌套查詢,可見T-SQL的遠程查詢非常強大

轉自:http://www.cnblogs.com/OpenCoder/archive/2010/03/18/1689321.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 万年县| 绥阳县| 长白| 策勒县| 镇远县| 监利县| 二连浩特市| 府谷县| 张掖市| 启东市| 高阳县| 灌南县| 保亭| 巨鹿县| 玛纳斯县| 封丘县| 福鼎市| 元朗区| 班玛县| 漯河市| 邢台市| 宝兴县| 抚顺市| 汕头市| 大连市| 新安县| 双柏县| 西吉县| 四会市| 沂水县| 台中县| 班戈县| 图木舒克市| 化德县| 泊头市| 九龙县| 哈密市| 长乐市| 大竹县| 彭山县| 凤冈县|