通常情況下,我們的CRUD操作都在單一數據庫中進行。但是,也可能會遇到需要進行跨數據交流的情況。對此,我以跨數據庫進行表的訪問為例,稍微總結了下。
一、同SQL SERVER
這個最簡單。直接在表名前加上"[數據庫名]."就可以了。
例:
1
|
SELECT * FROM [DestinationDBName].dbo.DestinationTableName |
二、跨SQL SERVER
主要介紹兩種方法:
(一)通過鏈接服務器
1.先執行系統存儲過程 sp_addlinkedserver :
1
2
3
4
5
|
EXEC sp_addlinkedserver @server= 'DestinationDBAlias' , --目標數據庫的別名,在連接并登錄后,就可以用它來訪問數據 @srvproduct= '' , @provider= 'SQLOLEDB' , @datasrc= 'DestinationServerIP\ServerName' --通常用"IP\端口名"組成,如果服務器上只裝了一個MSSQL SERVER,或者裝了多個MS SQLSERVER,但要訪問的是默認端口,就不用加端口名 |
2.再執行系統存儲過程 sp_addlinkedsrvlogin:
1
2
3
4
5
6
|
EXEC sp_addlinkedsrvlogin @rmtsrvname= 'DestinationDBAlias' , --注意這里的名字應與第一步sp_addlinkedserver中@server值一致 @useself= 'false' , @locallogin= NULL , @rmtuser= 'UserName' , @rmtpassword= 'Password' |
3.現在,我們可以通過目標數據庫別名訪問數據:
例:
1
|
SELECT * FROM [DestinationDBAlias].dbo.DestinationTableName |
4.使用結束,不要忘了斷開與目標數據庫的連接:
1
2
3
|
EXEC sp_dropserver @server= 'DestinationDBAlias' , --注意這里的名字應與第一步sp_addlinkedserver中@server值一致 @droplogins= 'droplogins' |
(二)使用OPENDATASOURCE/OPENROWSET連接遠程服務器
1
2
3
4
5
6
7
8
9
|
SELECT * FROM OPENDATASOURCE ( 'SQLOLEDB' , --provider_name 'Data Source=DestinationServerIP;User ID=UserName;Password=Password' --provider_string(datasource;user_id;password) ).[DestinationDBAlias].dbo.DestinationTableName SELECT * FROM OPENROWSET ( 'SQLOLEDB' , --provider_name 'DestinationServerIP' ; 'UserName' ; 'Password' , --provider_string(datasource;user_id;password) 'SELECT * FROM [DestinationDBAlias].dbo.DestinationTableName' ) --query_string |
函數OPENQUERY也能實現跨服務器訪問數據,但它是基于已經建立鏈接服務器的基礎上來操作的,應屬第一種方法,在此不再贅述。
以上就是跨數據庫實現數據交流的方法,希望大家可以親自動手操作一下。