SQL Server 分布式查詢(暫且三種)

2021-08-23 15:43:46 字數 3421 閱讀 3239

1、select * from servername.dbo.tablename

2、select * from opendatasource(

'sqloledb',

'data source=遠端ip;user id=sa;password=密碼'

).庫名.dbo.表名

where 條件

解除sql阻止:

sql server 阻止了對元件 'adhocdistributedqueries'

的 statement'openrowset/opendatasource' 的訪問,因為此元件已作為此伺服器安全配置的一部分而被關閉。系統管理員可以通過使用 sp_configure 啟用 'adhocdistributedqueries'

。有關啟用 'adhocdistributedqueries'

的詳細資訊,請參閱 sql server 聯機叢書中的 "外圍應用配置器"。

因為sql2005預設是沒有開啟'adhocdistributedqueries'

元件,開啟方法如下

exec sp_configure 'show advanced options', 1

go reconfigure

go exec sp_configure 'adhocdistributedqueries'

, 1go

reconfigure

go關閉ad hoc distributed queries:

exec sp_configure 'ad hoc distributed queries',0

reconfigure

exec sp_configure 'show advanced options',0

reconfigure

3、可以使用sql-server企業管理器進行建立,注意其中的rpc及rpc out兩項,也可以使用sql語句來完成定義,主要涉及到三個儲存過程

sp_addlinkedserver,sp_serveroption和sp_addlinkedsrvlogin,以下是三個儲存過程的語法:

sp_addlinkedserver

建立乙個鏈結的伺服器,使其允許對分布式的、針對 ole db 資料來源的異類查詢進行訪問。在使用 sp_addlinkedserver 建立鏈結的伺服器之後,此伺服器就可以執行分布式查詢。如果鏈結伺服器定義為 microsoft® sql server™,則可執行遠端儲存過程。

語法sp_addlinkedserver [ @server = ] 'server'

[ , [ @srvproduct = ] 'product_name' ]

[ , [ @provider = ] 'provider_name' ]

[ , [ @datasrc = ] 'data_source' ]

[ , [ @location = ] 'location' ]

[ , [ @provstr = ] 'provider_string' ]

[ , [ @catalog = ] 'catalog' ]

例如:sp_addlinkedserver 'servername','','sqloledb','dbconn',null,'driver=;server=192.168.1.181;uid=sa,pwd=;'

此處servername為自定義名稱,dbconn為定義的odbc資料來源

一般使用的引數如下:

@server 「linked server」

@srvproduct 「product name」

@provider 「provider」

@datasrc 「data source」

二、設定伺服器選項

使用 sp_serveroption 過程,所要使用的引數如下:

@server 「linked server」

@optname 「rpc」或「rpc out」

@optvalue true 或 false

三、新增login

使用 sp_addlinkedsrvlogin 過程,所要使用的引數如下:

@rmtsrvname 「linked server」

@useself true 或 false

@locallogin 本地login

@rmtuser 遠端使用者

@rmtpassword 遠端使用者口令

全部完整的示例如下:

exec sp_addlinkedserver 'test','','sqloledb','test',null,'driver=;server=ipaddress;uid=sa,pwd=;'

exec sp_serveroption n'test', n'rpc out', n'true'

exec sp_serveroption n'test', n'rpc', n'true'

exec sp_addlinkedsrvlogin 'test','false',null,'sa',''

訪問可以使用如下語句:select * from test.pubs.dbo.tb_maintab

主要步驟只有兩步:

exec sp_addlinkedserver '別名','','msdasql',null,null,'driver=;server=遠端名;uid=使用者;pwd=密碼;'

--註冊乙個遠端伺服器

exec sp_addlinkedsrvlogin @rmtsrvname='別名',@useself='false',@locallogin='本地使用者',@rmtuser='遠端使用者',@rmtpassword='遠端使用者的密碼'

--為遠端伺服器註冊登入賬戶

go 然後你就可以如下:

select * from 別名.庫名.dbo.表名

insert 庫名.dbo.表名 select * from 別名.庫名.dbo.表名

select * into 庫名.dbo.新錶名 from 別名.庫名.dbo.表名

go當你不再使用遠端例項後記得刪除它

exec sp_dropserver '別名', 'droplogins';

--'droplogins'的作用是同時刪除註冊的登入賬號

SQLServer跨庫查詢 分布式查詢

用openrowset連線遠端sql或插入資料 如果只是臨時訪問,可以直接用openrowset 查詢示例 select from openrowset sqloledb sql伺服器名 使用者名稱 密碼 資料庫名.dbo.表名 在跨庫查詢時需要啟用ad hoc distributed querie...

sql server中分布式查詢隨筆

由於業務邏輯的多樣性 經常得在sql server中查詢不同資料庫中資料 這就產生了分布式查詢的需求 現我將開發中遇到的幾種查詢總結如下 1.access版本 建立連線伺服器 exec sp addlinkedserver 要建立的鏈結伺服器名稱 ai 產品名稱 access ole db 字元 m...

sql server中分布式查詢隨筆

由於業務邏輯的多樣性 經常得在sql server中查詢不同資料庫中資料 這就產生了分布式查詢的需求現我將開發中遇到的幾種查詢總結如下 1.access版本 建立連線伺服器 exec sp addlinkedserver 要建立的鏈結伺服器名稱 ai 產品名稱 access ole db 字元 mi...