如果一個項目需要二至多台服務器,而我們又必須從幾台服務器中將數據取出來,這就必須用分布式查詢!
在這裡有兩個概念:本地數據源、遠程數據源!
本地數據源指的是單個服務器上的數據
而遠程數據源指的是另一個SQL實例上的數據。如何跨服務器取數呢?
有二種建議:
--如果經常訪問或數據量大,建議用鏈接服務器
--創建鏈接服務器
exec sp_addlinkedserver ''srv_lnk'','''',''SQLOLEDB'',''遠程服務器名或ip地址''
exec sp_addlinkedsrvlogin ''srv_lnk'',''false'',null,''用戶名'',''密碼''
go
--查詢示例
select * from srv_lnk.數據庫名.dbo.表名
--導入示例
select * into 表 from srv_lnk.數據庫名.dbo.表名
go
--以後不再使用時刪除鏈接服務器
exec sp_dropserver ''srv_lnk'',''droplogins''
--如果只是臨時訪問,可以直接用openrowset
--查詢示例
select * from openrowset(''SQLOLEDB''
,''sql服務器名'';''用戶名'';''密碼''
,數據庫名.dbo.表名)
--導入示例
select * into 表 from openrowset(''SQLOLEDB''
,''sql服務器名'';''用戶名'';''密碼''
,數據庫名.dbo.表名)
如何在企業管理器中設置呢?
SQL實例--->安全性--->鏈接服務器--->右鍵新建鏈接服務器
常規中輸入鏈接服務器的名字,選其它數據源,選SQLOLEDB,數據源寫上,一般寫IP地址
再選安全性-----》選本地登陸----》模擬打勾
用此安全上下文進行,輸入用戶與密碼
常見問題:
1.在建立完鏈接服務器後,我們進行查詢操作
例:我們已對DFLD的服務器做了鏈接,緊接著我們想訪問它中PUBS數據庫中的Authors表
Select * From DFLD.PUBS..Authors
經常會出二類問題
1.提示
異類查詢要求為連接設置 ANSI_NULLS 和 ANSI_WARNINGS 選項。這將確保一致的查詢語義。請啟用這 些選項,然後重新發出查詢。
這種提示是因為沒有將ANSI_NULLS與ANSI_WARNINGS打開
SET ANSI_NULLS ON
SET ANSI_WARNINGS ON
Select * From DFLD.PUBS..Authors--這樣就可以了!
2.提示
某機器MSDTC服務不可用
這種提示很簡單,只需要將MSDTC服務打開就是了!注:需要雙方均打開MSDTC服務,默認不打開