解析MSSQL跨資料庫查詢的實現方法

davidtim發表於2021-09-09

           複製程式碼 程式碼如下:
--建立連結伺服器  
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):
(成功)或 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.表名
                       

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3349/viewspace-2804353/,如需轉載,請註明出處,否則將追究法律責任。

相關文章