MSSQL跨伺服器資料庫查詢

2022-01-13 07:24:52 字數 3898 閱讀 3365

--

建立鏈結伺服器

exec sp_addlinkedserver '

鏈結伺服器名稱

', '', '

sqloledb

', '

遠端伺服器名或ip位址

'exec sp_addlinkedsrvlogin '

鏈結伺服器名稱

', '

false

' ,null, '

需要鏈結伺服器使用者名稱

', '密碼'

sp_addlinkedserver

[@server= ]'

server'[

, [ @srvproduct= ]'

product_name

' ]

[, [ @provider= ]'

provider_name

' ]

[, [ @datasrc= ]'

data_source

' ]

[, [ @location= ]'

location

' ]

[, [ @provstr= ]'

provider_string

' ]

[, [ @catalog= ]'

catalog

' ]

引數(parameters):

[@server = ]'

server

'要建立的鏈結伺服器的名稱。server 的資料型別為 sysname,沒有預設值。

[@srvproduct = ]'

product_name

'要新增為鏈結伺服器的 ole db 資料來源的產品名稱。product_name 的資料型別為 nvarchar(128),預設值為 null。如果為 sql server,則不必指定 provider_name、data_source、location、provider_string 和 catalog。

[@provider = ]'

provider_name

'與此資料來源對應的 ole db 訪問介面的唯一程式設計識別符號 (progid)。對於當前計算機中安裝的指定 ole db 訪問介面,provider_name 必須唯一。provider_name 的資料型別為 nvarchar(128),預設值為 null;但如果忽略 provider_name,則使用 sqlncli。sqlncli 是 sql 本機 ole db 訪問介面。ole db 訪問介面應以指定的 progid 在登錄檔中註冊。

[@datasrc = ]'

data_source

'由 ole db 訪問介面解釋的資料來源的名稱。data_source 的資料型別為 nvarchar(4000)。data_source 作為 dbprop_init_datasource 屬性傳遞以初始化 ole db 訪問介面。

[@location = ]'

location

'由 ole db 訪問介面解釋的資料庫的位置。location 的資料型別為 nvarchar(4000),預設值為 null。location 作為 dbprop_init_location 屬性傳遞以初始化 ole db 訪問介面。

[@provstr = ]'

provider_string

'ole db 訪問介面特定的連線字串,它可標識唯一的資料來源。provider_string 的資料型別為 nvarchar(4000),預設值為 null。provstr 或傳遞給 idatainitialize 或設定為 dbprop_init_providerstring 屬性以初始化 ole db 訪問介面。

在針對 sql 本機客戶端 ole db 訪問介面建立鏈結伺服器後,可將 server 關鍵字用作 server=servername/instancename 來指定例項,以指定特定的 sql server 例項。servername 是執行 sql server 的計算機名稱,instancename 是使用者將連線到的特定 sql server 例項的名稱。

[@catalog = ]'

catalog

'與 ole db 訪問介面建立連線時所使用的目錄。catalog 的資料型別為 sysname,預設值為 null。catalog 作為 dbprop_init_catalog 屬性傳遞以初始化 ole db 訪問介面。在針對 sql server 例項定義鏈結伺服器時,目錄指向鏈結伺服器對映到的預設資料庫。

返回**值(returnvalue):

0(成功)或 1(失敗)

許可權:要求具有 alter

any linked server 許可權。

sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname' [ , [ @useself = ] 'useself' ] [ , [ @locallogin = ] 'locallogin' ] [ , [ @rmtuser = ] 'rmtuser' ] [ , [ @rmtpassword = ] 'rmtpassword' ] 注意:不能從使用者定義的事務中執行 sp_addlinkedsrvlogin。

引數(parameters):[ @rmtsrvname = ] 'rmtsrvname' 應用登入對映的鏈結伺服器的名稱。rmtsrvname 的資料型別為 sysname,沒有預設值。 [ @useself = ] 'useself' 確定用於連線遠端伺服器的登入名。useself 的資料型別為 varchar(8),預設值為 true。 值為 true 時指定登入使用自己的憑據連線 rmtsrvname,忽略 rmtuser 和 rmtpassword 引數。

false 指定使用 rmtuser 和 rmtpassword 引數連線指定 locallogin 的 rmtsrvname。 如果 rmtuser 和 rmtpassword 也設定為 null,則不使用登入名或密碼來連線鏈結伺服器。 [ @locallogin = ] 'locallogin' 本地伺服器上的登入。locallogin 的資料型別為 sysname,預設值為 null。 null 指定此項應用於連線到 rmtsrvname 的所有本地登入。

如果不為 null,則 locallogin 可以是 sql server 登入或 windows 登入。 對於 windows 登入來說,必須以直接的方式或通過已被授權訪問的 windows 組成員身份授予其訪問 sql server 的許可權。 [ @rmtuser = ] 'rmtuser' 當 useself 為 false 時,表示用於連線 rmtsrvname 的使用者名稱。 rmtuser 的資料型別為 sysname,預設值為 null。 [ @rmtpassword = ] 'rmtpassword' 與 rmtuser 關聯的密碼。

rmtpassword 的資料型別為 sysname,預設值為 null。 返回**值(returnvalue): 0(成功)或 1(失敗) 許可權: 需要對伺服器具有 alter any login 許可權。

查詢示例 select * from 鏈結伺服器名.資料庫名.dbo.表名

在查詢分析器中首先執行【執行一次即可】

exec   sp_addlinkedserver       'test',   '',   'sqloledb',   '10.250.252.35'  

exec   sp_addlinkedsrvlogin     'test',   'false' ,null,   'aaa',   'pwd'

然後即可跨庫查詢

select top 10 * from test.vampire.dbo.[bo_通訊使用者小區資料201203] a

left outer join g3客戶201104 b

on a.使用者號碼=b.使用者號碼

MSSQL跨伺服器資料庫查詢

建立鏈結伺服器 exec sp addlinkedserver 鏈結伺服器名稱 sqloledb 遠端伺服器名或ip位址 exec sp addlinkedsrvlogin 鏈結伺服器名稱 false null,需要鏈結伺服器使用者名稱 密碼 刪除鏈結伺服器exec sp droplinkedsrv...

跨資料庫 跨伺服器查詢

if notexists select srvname from master dbo sysservers where srvname vlinkinadmin begin exec sp dropserver server vlinkinadmin droplogins droplogins 增...

MSSQL跨伺服器的資料庫操作

建立鏈結伺服器 exec sp addlinkedserver srv lnk sqloledb 192.168.5.113 exec sp addlinkedsrvlogin srv lnk false null,sa 12345670 go 查詢示例 select from srv lnk.sq...