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