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