從SQL Server中讀取XML檔案

2021-04-02 18:15:58 字數 2245 閱讀 7212

如果你參考books online(bol),你會發現有相關的條目,包括openxml以及 openrowset。所有的這些例子都支援將xml文字作為已經宣告的變數,這對於經常處理文字的使用者來說非常方便,但對於希望在開發中讀取xml檔案並進行相應處理的開發人員來說就不是這樣了。處理這樣的問題,或許最好從內到外來對其進行分析。

openxml是乙個rowset函式(即返回乙個rowset),它的工作方式類似於rowset函式openquery和openrowset。使用openxml可以對xml資料執行joins操作而無需首先匯入資料。你還可以將其同insert、select、update以及delete等操作聯合使用。

然而,要使用openxml,你必須執行兩項openquery和openrowset並不需要的任務。這兩項任務需要兩個系統儲存程序。

第乙個是sp_xml_preparedocument,它將讀取特定的xml文字並將其內容提取到記憶體中。其語法如下:

sp_xml_preparedocument @hdoc = output,

[, @xmltext = ]

[, @xpath_namespaces =

具體引數如下:

@hdoc:指向某記憶體區域的控制代碼(從作用上看等同於乙個指標),相關資料存放在這裡。注意這是乙個輸出變數,當該程序執行後,該變數將包含指向xml檔案內容在記憶體位址的控制代碼。由於你需要在隨後使用此結果,因此要確保對其進行儲存;

@xmltext:實際上你所希望處理的xml文字;

@xml_namespaces:為了正常操作你的xml資料所需要的任何名字空間索引(namespace references)。注意在這裡出現的任何url都需要用尖括號(<>)括起來;

假設所傳遞的這些引數都有效,並且xml文件存在,那麼你的xml資料就會被存放到記憶體中去。現在你就可以呼叫sp_xml_preparedocument,傳遞存放有xml檔案的變數,然後執行openxml。語法如下:

openxml(idocint [in],rowpatternnvarchar[in],[flagsbyte[in]])

[with (schemadeclaration | tablename)]

現在我們已經到達了最後的步驟。所有剩下的工作就是匯入乙個實際的xml檔案到sql並進行處理(很奇快為什麼所有的bol示例都沒有涉及到這一關鍵的部分)。

(我必須感謝我的同事billy pang所給予的幫助。他幫助我解決這個問題,並給出了**——儘管出於本文需要我對**進行了裁減。謝謝billy!)

基本的技巧是,將檔案逐行按文字讀取。然後把所有讀取的行連線為乙個大的varchar變數。最後,將變數傳遞給前面所說的**。

以下就是讀取檔案並將其內容存放到某變數的**:

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

endselect @filecontents as filecontents

drop table #tempxml

現在在變數@filecontents變數中你已經獲得了檔案的全部內容。所需要做的只是將變數通過@xmltext引數傳遞給sp_xml_preparedocument,然後再呼叫openxml。

有了這種解決辦法,對xml文件進行各種處理就成為了可能。你可以將xml文件同sql**連線在一起而無需匯入資料,然後對這些資料進行insert、pdate和delete等任何操作。

Sqlserver 從XML檔案中讀取配置資訊

如何在sqlserver中從外部xml檔案中讀取配置資訊呢?該問題源自一家企業的筆試資訊有感。一xml檔案內容 指令碼 declare x xml declare hdocid int 從外部檔案讀取檔案內容 有很多種方式 xp cmdshell 呼叫作業系統的顯式文字檔案內容的擴充套件儲存過程。b...

C 使用XmlSerializer讀取Xml內容

1 book.xml檔案如下 asp.net 本質論劉湘 10.23 c 基礎孟第 50.28 2 根據book.xml 檔案生成架構檔案 book.xsd 在vs2010開啟book.xml檔案,vs2010的選單欄上出現乙個xml的選單,選擇 建立架構 vs2010會自動生成book.xsd檔案...

在SQLSERVER中讀取Oracle中的資料

在sqlserver 中讀取oracle 中的資料 作者 林清清日期 2006 2 13 要求 在ms sql server2000 資料庫中連線並讀取 oracle9i 資料庫中的資料.假設 目標oracle 資料庫相關引數如下 table name table1 oracle ip 172.18...