通常情況下,我們的crud操作都在單一資料庫中進行。但是,也可能會遇到需要進行跨資料交流的情況。對此,我以跨資料庫進行表的訪問為例,稍微總結了下。
一、同sql server
這個最簡單。直接在表名前加上"[資料庫名]."就可以了。
例:
select*from
[destinationdbname
].dbo.destinationtablename
二、跨sql server
主要介紹兩種方法:
(一)通過鏈結伺服器
1.先執行系統儲存過程 sp_addlinkedserver :
execsp_addlinkedserver
@server='
destinationdbalias
',--
目標資料庫的別名,在連線並登入後,就可以用它來訪問資料
@srvproduct=''
,@provider='
sqloledb',
@datasrc='
destinationserverip\servername'--
通常用"ip\埠名"組成,如果伺服器上只裝了乙個mssql server,或者裝了多個ms sqlserver,但要訪問的是預設埠,就不用加埠名
2.再執行系統儲存過程 sp_addlinkedsrvlogin:
execsp_addlinkedsrvlogin
@rmtsrvname='
destinationdbalias
',--
注意這裡的名字應與第一步sp_addlinkedserver中@server值一致
@useself='
false',
@locallogin
=null
,@rmtuser='
username',
@rmtpassword='
password
'
3.現在,我們可以通過目標資料庫別名訪問資料:
例:
select*from
[destinationdbalias
].dbo.destinationtablename
4.使用結束,不要忘了斷開與目標資料庫的連線:
execsp_dropserver
@server='
destinationdbalias
',--
注意這裡的名字應與第一步sp_addlinkedserver中@server值一致
@droplogins='
droplogins
'
(二)使用opendatasource/openrowset連線遠端伺服器
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也能實現跨伺服器訪問資料,但它是基於已經建立鏈結伺服器的基礎上來操作的,應屬第一種方法,在此不再贅述。
跨資料庫查詢資料
今天要導資料,不幸的是要一台伺服器導到另一台伺服器上,於是乎就到上網查了一下怎麼進行跨伺服器資料庫查詢 方法一 1select from opendatasource 2 sqloledb 3 data source 遠端ip user id sa password 密碼 4 庫名.dbo.表名 於...
跨資料庫引擎 資料庫查詢
包含訪問 ole db 資料來源中的遠端資料所需的全部連線資訊。當訪問鏈結伺服器中的表時,這種方法是一種替代方法,並且是一種使用 ole db 連線並訪問遠端資料的一次性的 特殊的方法。可以在查詢的 from 子句中像引用表名那樣引用 openrowset 函式。依據 ole db 提供程式的能力,...
資料庫 mysql 跨庫訪問 資料庫跨庫訪問問題
sql server中的所有權鏈及其問題 沒有多少朋友對所有權鏈真的理解的。我自己有時候經常回過來看看這些資料,覺得還是很有意思的。下面的內容摘自微軟文件,介紹得比較好 簡而言之 1.如果在同乙個資料庫中,只要兩個物件的所有者是一樣的,那麼他們之間的訪問是不檢查訪問者身份的。例如乙個檢視和乙個表是屬...