SQL Server中讀取XML檔案的簡單做法

2021-09-05 19:51:09 字數 3188 閱讀 2007

sql server 2000使得以xml匯出資料變得更加簡單,但在sql server 2000中匯入xml資料並對其進行處理則有些麻煩。本文介紹在sql server中讀取xml檔案的簡單做法。

sql server 2000

使得以xml

匯出資料變得更加簡單,但在

sql server 2000

中匯入xml

資料並對其進行處理則有些麻煩。

如果你參考

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)]

openxml

所接收的引數。請參閱

bol以獲取更多資訊。在

transact-sql reference

中查詢openxml

。現在我們已經到達了最後的步驟。所有剩下的工作就是匯入乙個實際的

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:tempcurrentsettings.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

現在在變數

@filecontents

變數中你已經獲得了檔案的全部內容。所需要做的只是將變數通過

@xmltext

引數傳遞給

sp_xml_preparedocument

,然後再呼叫

openxml

。有了這種解決辦法,對

xml文件進行各種處理就成為了可能。你可以將

xml文件同

sql**連線在一起而無需匯入資料,然後對這些資料進行

insert

、pdate

和delete

等任何操作。

從SQL Server中讀取XML檔案

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

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

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

SQL SERVER中XML命名空間

有xml如下 create table a params xml insert into a params values 202014111101 013920130005 name0005 0prod.1000000100088400 msgbody節點聲名了命名空間,用平常的查詢語句是查不到資料...