?
快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

八達國際線路: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數據就會被寄放到內存中去?,F在你就可以調用 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:\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 @[email protected]

BEGIN

SET @x = @x + 1

SELECT @FileCon八達國際線路tents = @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等任何操作。

免責聲明:以上內容源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

您可能還會對下面的文章感興趣:

快三平台开户