聊聊SQL中的Dblink
本文轉(zhuǎn)載自微信公眾號「SQL數(shù)據(jù)庫開發(fā)」,作者丶平凡世界。轉(zhuǎn)載本文請聯(lián)系SQL數(shù)據(jù)庫開發(fā)公眾號。
DBLINK的定義
當(dāng)我們要跨本地?cái)?shù)據(jù)庫,訪問另外一個(gè)數(shù)據(jù)庫表中的數(shù)據(jù)時(shí),本地?cái)?shù)據(jù)庫中就必須要創(chuàng)建遠(yuǎn)程數(shù)據(jù)庫的DBLINK,通過DBLINK本地?cái)?shù)據(jù)庫可以像訪問本地?cái)?shù)據(jù)庫一樣訪問遠(yuǎn)程數(shù)據(jù)庫表中的數(shù)據(jù)。
創(chuàng)建DBLINK的語法
定義DBLINK類型
EXEC master.dbo.sp_addlinkedserver
@server = '遠(yuǎn)程IP地址',
@srvproduct='DBLINK類型(默認(rèn)SQL Server)'
定義DBLINK連接屬性
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname='遠(yuǎn)程IP地址',
@useself='False',
@locallogin=NULL,
@rmtuser='遠(yuǎn)程數(shù)據(jù)庫用戶名',
@rmtpassword='遠(yuǎn)程數(shù)據(jù)庫密碼'
以上兩步要一起執(zhí)行才能生成DBLINK連接。
創(chuàng)建DBLINK連接示例
本地?cái)?shù)據(jù)庫IP地址是192.168.0.35,已知局域網(wǎng)有一臺IP地址為192.169.0.39的數(shù)據(jù)庫服務(wù)器,其賬戶和密碼分別是sa和!QAZ1234,那么我們應(yīng)該這樣創(chuàng)建DBLINK連接:
- USE master
- GO
- EXEC master.dbo.sp_addlinkedserver
- @server = '192.168.0.39',
- @srvproduct='SQL Server'
- EXEC master.dbo.sp_addlinkedsrvlogin
- @rmtsrvname='192.168.0.39',
- @useself='False',
- @locallogin=NULL,
- @rmtuser='sa',
- @rmtpassword='!QAZ1234'
- Go
執(zhí)行完后我們會看到在SSMS的服務(wù)器對象下面有一個(gè)創(chuàng)建好的DBLINK連接,如下圖:
DBLINK的作用
前面的定義已經(jīng)說明,通過DBLINK本地?cái)?shù)據(jù)庫可以像訪問本地?cái)?shù)據(jù)庫一樣訪問遠(yuǎn)程數(shù)據(jù)庫表中的數(shù)據(jù)。
DBLINK示例
以本地Customers表和遠(yuǎn)程數(shù)據(jù)庫192.168.0.39里SQL_Road數(shù)據(jù)庫下的Orders表為例:
Customers表
遠(yuǎn)程數(shù)據(jù)庫中的Orders表
我們想用本地的Customers表關(guān)聯(lián)遠(yuǎn)程數(shù)據(jù)庫192.168.0.39里SQL_Road數(shù)據(jù)庫下的Orders表里的數(shù)據(jù),可以這樣寫SQL:
- SELECT c.姓名,o.訂單日期 FROM Customers c
- JOIN [192.168.0.38].SQL_Road.dbo.Orders o ON c.客戶ID=o.客戶ID
結(jié)果如下:
這樣我們就將本來隔絕的兩個(gè)表通過DBLINK關(guān)聯(lián)上了。
刪除DBLINK
當(dāng)我們不需要DBLINK的時(shí)候,可以通過以下方式進(jìn)行刪除。
- EXEC master.dbo.sp_dropserver
- @server='192.169.0.39',
- @droplogins='droplogins'
這樣就將剛創(chuàng)建的DBLINK刪除了。
總結(jié)
DBLINK是我們?nèi)粘2樵児芾斫?jīng)常要使用到的一個(gè)利器,可以很方便的將原本隔開的兩個(gè)數(shù)據(jù)庫建立起連接。為我們跨庫查詢提供一個(gè)非常便捷的方法。