日本xxxx18视频在线观看-日本xxxx1819-日本xxxwww在线观看-日本xxx-日本xx-日本www在线视频

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

跨數據庫服務器查詢和跨表更新

admin
2011年7月1日 9:40 本文熱度 3565

一.摘要


本文通過實際業務場景講解如何實現跨數據庫服務器的數據查詢, 以及跨表更新的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' 


 
上面使用sp_addlinkedserver和sp_addlinkedsrvlogin 與服務器建立了鏈接, 接下來就可以直接查詢遠程服務器上的數據了:

--創建臨時表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' ] 


參數



[ @server = ] 'server'


要創建的鏈接服務器的名稱。server 的數據類型為 sysname,沒有默認值。



[ @srvproduct = ] 'product_name'


要添加為鏈接服務器的 OLE DB 數據源的產品名稱。product_name 的數據類型為 nvarchar(128),默認值為 NULL。如果為 SQL Server,則不必指定 provider_name、data_source、location、provider_string 和 catalog。



[ @provider = ] 'provider_name'


與此數據源對應的 OLE DB 訪問接口的唯一編程標識符 (PROGID)。對于當前計算機中安裝的指定 OLE DB 訪問接口,provider_name 必須唯一。provider_name 的數據類型為 nvarchar(128),默認值為 NULL;但如果忽略 provider_name,則使用 SQLNCLI。SQLNCLI 是 SQL 本機 OLE DB 訪問接口。OLE DB 訪問接口應以指定的 PROGID 在注冊表中注冊。



[ @datasrc = ] 'data_source'


由 OLE DB 訪問接口解釋的數據源的名稱。data_source 的數據類型為 nvarchar(4000)。data_source 作為 DBPROP_INIT_DATASOURCE 屬性傳遞以初始化 OLE DB 訪問接口。



[ @location = ] 'location'


由 OLE DB 訪問接口解釋的數據庫的位置。location 的數據類型為 nvarchar(4000),默認值為 NULL。location 作為 DBPROP_INIT_LOCATION 屬性傳遞以初始化 OLE DB 訪問接口。



[ @provstr = ] 'provider_string'


OLE DB 訪問接口特定的連接字符串,它可標識唯一的數據源。provider_string 的數據類型為 nvarchar(4000),默認值為 NULL。provstr 或傳遞給 IDataInitialize 或設置為 DBPROP_INIT_PROVIDERSTRING 屬性以初始化 OLE DB 訪問接口。


在針對 SQL 本機客戶端 OLE DB 訪問接口創建鏈接服務器后,可將 SERVER 關鍵字用作 SERVER=servername\instancename 來指定實例,以指定特定的 SQL Server 實例。servername 是運行 SQL Server 的計算機名稱,instancename 是用戶將連接到的特定 SQL Server 實例的名稱。



[ @catalog = ] 'catalog'


與 OLE DB 訪問接口建立連接時所使用的目錄。catalog 的數據類型為 sysname,默認值為 NULL。catalog 作為 DBPROP_INIT_CATALOG 屬性傳遞以初始化 OLE DB 訪問接口。在針對 SQL Server 實例定義鏈接服務器時,目錄指向鏈接服務器映射到的默認數據庫。


登錄鏈接服務器 sp_addlinkedsrvlogin


語法

sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname'      [ , [ @useself = ] 'useself' ]      [ , [ @locallogin = ] 'locallogin' ]      [ , [ @rmtuser = ] 'rmtuser' ]      [ , [ @rmtpassword = ] 'rmtpassword' ] 


參數



[ @rmtsrvname = ] 'rmtsrvname'


應用登錄映射的鏈接服務器的名稱。rmtsrvname 的數據類型為 sysname,沒有默認值。



[ @useself = ] 'useself'


確定用于連接遠程服務器的登錄名。useself 的數據類型為 varchar(8),默認值為 TRUE。


值為 true 時指定登錄使用自己的憑據連接 rmtsrvname,忽略 rmtuser 和 rmtpassword 參數。false 指定使用 rmtuser 和 rmtpassword 參數連接指定 locallogin 的 rmtsrvname。如果 rmtuser 和 rmtpassword 也設置為 NULL,則不使用登錄名或密碼來連接鏈接服務器。



[ @locallogin = ] 'locallogin'


本地服務器上的登錄。locallogin 的數據類型為 sysname,默認值為 NULL。NULL 指定此項應用于連接到 rmtsrvname 的所有本地登錄。如果不為 NULL,則 locallogin 可以是 SQL Server 登錄或 Windows 登錄。對于 Windows 登錄來說,必須以直接的方式或通過已被授權訪問的 Windows 組成員身份授予其訪問 SQL Server 的權限。



[ @rmtuser = ] 'rmtuser'


當 useself 為 false 時,表示用于連接 rmtsrvname 的用戶名。rmtuser 的數據類型為 sysname,默認值為 NULL。



[ @rmtpassword = ] 'rmtpassword'


與 rmtuser 關聯的密碼。rmtpassword 的數據類型為 sysname,默認值為 NULL。


使用鏈接服務器


服務器名.數據庫名.dbo.表名


刪除鏈接服務器 sp_dropserver


語法

sp_dropserver [ @server = ] 'server'      [ , [ @droplogins = ] { 'droplogins' | NULL} ]

參數



[ @server = ] 'server'


要刪除的服務器。server 的數據類型為 sysname,無默認值。server 必須存在。



[ @droplogins = ] 'droplogins' | NULL


指示如果指定了 droplogins,那么對于 server,還必須刪除相關的遠程服務器和鏈接服務器登錄名。@droplogins 的數據類型為 char(10),默認值為 NULL。


作者:張子秋
出處:http://www.cnblogs.com/zhangziqiu/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

該文章在 2011/7/1 9:40:36 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 欧美日韩一卡二区 | 国产高跟鞋丝袜在线观看 | 国产原创中文醉酒邻居误闯 | 国产噜噜免费 | 欧美多人乱大交xxxxx变态 | 日韩欧美理论在线观 | 国产精品综合社区 | 国产色片免费网址 | 97国语精品自产拍在线观看茸 | 91精品国产薄丝高跟在线动漫 | 2025年最新高清热播电影 | 成全视频在线观看 | 国产精品黄页网站在线播放免费 | 2025最新热播电视剧 | 久热国产在线一区二区v | 国产在线精品一区免费香蕉 | 欧美日韩大码中文区二区三区 | 国产精品福利视 | 欧美精品1区国新欲乱视频 国产h精品在线观看 | 欧美中文字幕在线 | 国产精品宾馆在线精品酒店 | 欧美日产欧美日产精品 | 国产在线视频第一页 | 欧美特黄a级 | www俺去也 | 国产午夜福利电影免费在线观看 | 成全电影大全在线播放 | 九九九九九九伊人 | 国产又爽又黄又湿免费99 | 国产极品视频一区二 | 国产黄大片在线观看 | 久青草国产在线视频www | 日韩aⅴ在线观看 | 免费无线乱码不卡一二三四 | 国产精品视频第一区二区三区 | 免费国产又色又爽又黄的视频 | 国产精品自在在线免费观看 | 2025最新高清电影大全 | 精品国产福利在线观看网址 | 欧美精品一区二区三区四区 | 欧美在线观看网站 |