SQLserver的分布式查詢:如果一個項目需要二至多台服務器,而我們又必須從幾台服務器中將數據取出來,這就必須用分布式查詢!
在這里有兩個概念:本地數據源、遠程數據源!
本地數據源指的是單個服務器上的數據而遠程數據源指的是另一個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服務,默認不打開