亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網(wǎng)絡(luò),我們將竭誠為您提供優(yōu)質(zhì)的服務(wù)! 誠征網(wǎng)絡(luò)推廣 | 網(wǎng)站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯(lián)系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業(yè)務(wù)咨詢
有事點(diǎn)擊這里…  531199185
有事點(diǎn)擊這里…  61352289
點(diǎn)擊這里給我發(fā)消息  81721488
有事點(diǎn)擊這里…  376585780
有事點(diǎn)擊這里…  872642803
有事點(diǎn)擊這里…  459248018
有事點(diǎn)擊這里…  61352288
有事點(diǎn)擊這里…  380791050
技術(shù)支持
有事點(diǎn)擊這里…  714236853
有事點(diǎn)擊這里…  719304487
有事點(diǎn)擊這里…  1208894568
有事點(diǎn)擊這里…  61352289
在線客服
有事點(diǎn)擊這里…  531199185
有事點(diǎn)擊這里…  61352288
有事點(diǎn)擊這里…  983054746
有事點(diǎn)擊這里…  893984210
當(dāng)前位置:首頁 >> 技術(shù)文章 >> 文章瀏覽
技術(shù)文章

從SQL Server中讀取XML文件

添加時(shí)間:2013-10-14 17:38:04  添加: 思海網(wǎng)絡(luò) 

  SQL Server 2000使得以XML導(dǎo)出數(shù)據(jù)變得更加簡單,但在SQL Server 2000中導(dǎo)入XML數(shù)據(jù)并對其進(jìn)行處理則有些麻煩。
  
  如果你參考Books Online(BOL),你會發(fā)現(xiàn)有相關(guān)的條目,包括OPENXML以及 OPENROWSET。所有的這些例子都支持將XML文本作為已經(jīng)聲明的變量,這對于經(jīng)常處理文本的用戶來說非常方便,但對于希望在開發(fā)中讀取XML文件并進(jìn)行相應(yīng)處理的開發(fā)人員來說就不是這樣了。處理這樣的問題,或許最好從內(nèi)到外來對其進(jìn)行分析。
  
  OPENXML是一個(gè) rowset函數(shù)(即返回一個(gè)rowset),它的工作方式類似于rowset函數(shù)OPENQUERY和OPENROWSET。使用OPENXML可以對 XML數(shù)據(jù)執(zhí)行JOINs操作而無需首先導(dǎo)入數(shù)據(jù)。你還可以將其同INSERT、SELECT、UPDATE以及DELETE等操作聯(lián)合使用。
  
  然而,要使用OPENXML,你必須執(zhí)行兩項(xiàng)OPENQUERY和OPENROWSET并不需要的任務(wù)。這兩項(xiàng)任務(wù)需要兩個(gè)系統(tǒng)存儲進(jìn)程。
  
  第一個(gè)是sp_xml_preparedocument,它將讀取特定的XML文本并將其內(nèi)容提取到內(nèi)存中。其語法如下:
  
  sp_xml_preparedocument @hdoc = OUTPUT,
  
  [, @xmltext = ]
  
  [, @xpath_namespaces =
  
  具體參數(shù)如下:
  
  @hdoc:指向某內(nèi)存區(qū)域的句柄(從作用上看等同于一個(gè)指針),相關(guān)數(shù)據(jù)存放在這里。注意這是一個(gè)輸出變量,當(dāng)該進(jìn)程運(yùn)行后,該變量將包含指向XML文件內(nèi)容在內(nèi)存地址的句柄。由于你需要在隨后使用此結(jié)果,因此要確保對其進(jìn)行保存;
  
  @xmltext:實(shí)際上你所希望處理的XML文本;
  
  @xml_namespaces:為了正常操作你的XML數(shù)據(jù)所需要的任何名字空間索引(namespace references)。注意在這里出現(xiàn)的任何URL都需要用尖括號(<>)括起來;
  
  假設(shè)所傳遞的這些參數(shù)都有效,并且XML文檔存在,那么你的XML數(shù)據(jù)就會被存放到內(nèi)存中去。現(xiàn)在你就可以調(diào)用sp_xml_preparedocument,傳遞存放有XML文件的變量,然后執(zhí)行OPENXML。語法如下:
  
  OPENXML(idocint [in],rowpatternnvarchar[in],[flagsbyte[in]])
  
  [WITH (SchemaDeclaration | TableName)]
  
  注意:在本文中沒有足夠的文字來描述OPENXML所接收的參數(shù)。請參閱BOL以獲取更多信息。在Transact-SQL Reference中查找OPENXML。
  
  現(xiàn)在我們已經(jīng)到達(dá)了最后的步驟。所有剩下的工作就是導(dǎo)入一個(gè)實(shí)際的XML文件到SQL并進(jìn)行處理(很奇快為什么所有的BOL示例都沒有涉及到這一關(guān)鍵的部分)。
  
  (我必須感謝我的同事Billy Pang所給予的幫助。他幫助我解決這個(gè)問題,并給出了代碼——盡管出于本文需要我對代碼進(jìn)行了裁減。謝謝Billy!)
  
  基本的技巧是,將文件逐行按文本讀取。然后把所有讀取的行連接為一個(gè)大的VARCHAR變量。最后,將變量傳遞給前面所說的代碼。
  
  以下就是讀取文件并將其內(nèi)容存放到某變量的代碼:
  
  DECLARE @FileName varchar(255)
  
  DECLARE @ExecCmd VARCHAR(255)
  
  DECLARE @y INT
  
  DECLARE @x INT
  
  DECLARE @FileContents VARCHAR(8000)
  
  CREATE TABLE #tempXML(PK INT NOT NULL IDENTITY(1,1), ThisLine VARCHAR(255))
  
  SET @FileName = 'C:\Temp\CurrentSettings.xml'
  
  SET @ExecCmd = 'type ' + @FileName
  
  SET @FileContents = ''
  
  INSERT INTO #tempXML EXEC master.dbo.xp_cmdshell @ExecCmd
  
  SELECT @y = count(*) from #tempXML
  
  SET @x = 0
  
  WHILE @x <> @y
  
  BEGIN
  
  SET @x = @x + 1
  
  SELECT @FileContents = @FileContents + ThisLine from #tempXML WHERE PK
  
  = @x
  
  END
  
  SELECT @FileContents as FileContents
  
  DROP TABLE #tempXML
  
  現(xiàn)在在變量@FileContents變量中你已經(jīng)獲得了文件的全部內(nèi)容。所需要做的只是將變量通過@xmltext參數(shù)傳遞給sp_xml_preparedocument,然后再調(diào)用OPENXML。
  
  有了這種解決辦法,對XML文檔進(jìn)行各種處理就成為了可能。你可以將XML文檔同SQL表格連接在一起而無需導(dǎo)入數(shù)據(jù),然后對這些數(shù)據(jù)進(jìn)行INSERT、PDATE和DELETE等任何操作。

關(guān)鍵字:Server、數(shù)據(jù)、XML

分享到:

頂部 】 【 關(guān)閉
版權(quán)所有:佛山思海電腦網(wǎng)絡(luò)有限公司 ©1998-2024 All Rights Reserved.
聯(lián)系電話:(0757)22630313、22633833
中華人民共和國增值電信業(yè)務(wù)經(jīng)營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網(wǎng)站公安備案編號:44060602000007 交互式欄目專項(xiàng)備案編號:200303DD003  
察察 工商 網(wǎng)安 舉報(bào)有獎  警警  手機(jī)打開網(wǎng)站