跨數(shù)據(jù)庫服務(wù)器查詢和跨表更新
當(dāng)前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
一.摘要本文通過實際業(yè)務(wù)場景講解如何實現(xiàn)跨數(shù)據(jù)庫服務(wù)器的數(shù)據(jù)查詢, 以及跨表更新的SQL語法. 二.業(yè)務(wù)場景想實現(xiàn)的功能很簡單, 在我的本地一個表用來保存省的信息: T_Province 在另外一臺服務(wù)器上也有一個保存省的表province,其中有我本地沒有的provience_name_en和provience_id信息.我希望將它們保存到我的表中. 雖然用程序很容易實現(xiàn),但是我覺得如果能直接操作數(shù)據(jù)庫的話將更簡單,而且還能學(xué)習(xí)到跨服務(wù)器查詢的知識. 三.準(zhǔn)備工作首先我在本地 T_Province 表中添加了 ProvinceNameEn 和 ProvinceId 兩個字段.接下來就要想辦法為這兩個字段填充數(shù)據(jù). 四.跨服務(wù)器查詢首先需要解決跨服務(wù)器查詢的問題. 先來看我的最終實現(xiàn): --創(chuàng)建鏈接服務(wù)器exec sp_addlinkedserver@server= 'SQL2',@srvproduct= '',@provider='SQLNCLI', @datasrc = '192.168.9.123'--登錄鏈接服務(wù)器exec sp_addlinkedsrvlogin @rmtsrvname = 'SQL2',@useself = 'false ',@locallogin = null, @rmtuser ='sa', @rmtpassword = '123456' --創(chuàng)建臨時表create table #t (ProvinceName nvarchar(50), ProvinceNameEn nvarchar(50), ProvinceID nvarchar(50))INSERT INTO #t(ProvinceName, ProvinceNameEn, ProvinceID)( SELECT localDB.ProvinceName, serverDB.province_name_en, serverDB.province_ID FROM T_Province as localDB, SQL2.bdg_web_retail.dbo.province as serverDB WHERE localDB.ProvinceName = serverDB.Province_Name)--跨服務(wù)器查詢生成的臨時表結(jié)果SELECT * FROM #t
通過上面的SQL語句,我將兩個服務(wù)器,兩個數(shù)據(jù)庫的兩個表做了內(nèi)聯(lián)查詢,并且將結(jié)果保存到了本地的臨時表#t中. 五.跨表更新接下來希望將#t 中的數(shù)據(jù)更新到T_Province表中.其實跨表更新很簡單, 但是一開始頭腦中這個概念, 不知道set子句如何寫.下面是最后的成果: --更新本地的 T_Province表數(shù)據(jù)UPDATE T_ProvinceSET T_Province.ProvinceNameEn = ( SELECT #t.ProvinceNameEn), T_Province.ProvinceID = (SELECT #t.ProvinceID)FROM T_Province, #tWHERE T_Province.ProvinceName = #t.ProvinceName
需要注意的是我最開始使用了Declare建立表變量的形式創(chuàng)建了@t,但是執(zhí)行update操作時提示"必須聲明標(biāo)量變量@t", 換成了臨時表#t就沒有問題. 六.跨服務(wù)器查詢相關(guān)知識下面對跨服務(wù)器查詢用到的知識進行講解. 創(chuàng)建鏈接服務(wù)器 sp_addlinkedserver創(chuàng)建鏈接服務(wù)器。鏈接服務(wù)器讓用戶可以對 OLE DB 數(shù)據(jù)源進行分布式異類查詢。在使用 sp_addlinkedserver 創(chuàng)建鏈接服務(wù)器后,可對該服務(wù)器運行分布式查詢。如果鏈接服務(wù)器定義為 SQL Server 實例,則可執(zhí)行遠程存儲過程。 語法sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ] [ , [ @provider= ] 'provider_name' ] [ , [ @datasrc= ] 'data_source' ] [ , [ @location= ] 'location' ] [ , [ @provstr= ] 'provider_string' ] [ , [ @catalog= ] 'catalog' ] 參數(shù)
登錄鏈接服務(wù)器 sp_addlinkedsrvlogin語法sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname' [ , [ @useself = ] 'useself' ] [ , [ @locallogin = ] 'locallogin' ] [ , [ @rmtuser = ] 'rmtuser' ] [ , [ @rmtpassword = ] 'rmtpassword' ] 參數(shù)
使用鏈接服務(wù)器服務(wù)器名.數(shù)據(jù)庫名.dbo.表名 刪除鏈接服務(wù)器 sp_dropserver語法sp_dropserver [ @server = ] 'server' [ , [ @droplogins = ] { 'droplogins' | NULL} ] 參數(shù)
作者:張子秋 出處:http://www.cnblogs.com/zhangziqiu/ 本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。 該文章在 2011/7/1 9:40:36 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |