跨庫查詢推薦使用的方法


在使用分布式結構的系統時,我們常常會遇到跨庫查詢的問題,跨庫查詢一般使用以下方法

1. openrowset

例子:

select * from openrowset('SQLOLEDB','sql服務器名';'用戶名';'密碼',數據庫名.dbo.表名)

只有在以下情況下才能使用 OPENROWSET 訪問 OLE DB 數據源中的遠程數據:

指定訪問接口的 DisallowAdhocAccess 注冊表選項已顯式設置為 0,並啟用了 Ad Hoc Distributed Queries 高級配置選項。如果未設置這些選項,則默認行為不允許即席訪問。

需要修改數據庫服務器的注冊表DisallowAdhocAccess 並通過sp_configure 修改Ad Hoc Distributed Queries高級配置選項為啟用

2.opendatasource

例子:

SELECT   *

FROM   opendatasource('SQLOLEDB', 'Data Source=ip/ServerName;User ID=登陸名; password=密碼' ).數據庫名.dbo.表名

同樣環境需要與1的配置一樣

 

3.openquery

例子:

--首先創建一個連接創建鏈接服務器

exec sp_addlinkedserver  'ITSV','','SQLOLEDB','遠程服務器名或ip地址'

--查詢

select *

FROM openquery(ITSV, 'SELECT *  FROM 數據庫.dbo.表名')

--把本地表導入遠程表

insert openquery(ITSV, 'SELECT *  FROM 數據庫.dbo.表名')

select * from 本地表

 

4. sp_addlinkedserver

sp_addlinkedsrvlogin

 

例子:

exec sp_addlinkedserver  'srv_lnk','','SQLOLEDB','遠程服務器名或ip地址'

      exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用戶名','密碼'

 

建立好連接后,就可以查詢了

--查詢示例

   select * from srv_lnk.數據庫名.dbo.表名

    --導入示例

   select * into 表 from srv_lnk.數據庫名.dbo.表名

 

這個連接在建立好后會一直存在,如果不想用了,可以通過以下語句刪除

exec sp_dropserver 'srv_lnk','droplogins'

 

推薦使用的是方法4,在代碼中,也推薦使用方法4的連接方式,出於效率和安全行而已。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM