SQL2005對XML的處理功能講解

2021-06-11 21:25:49 字數 2481 閱讀 9510

sql2005對xml的處理功能講解

在 sqlserver2005 中對 xml 的處理功能顯然增強了很多,提供了 query(),value(),exist(),modify(),nodes() 等函式。

關於 xml ,難以理解的不是 sqlserver 提供的函式,而是對 xml 本身的理解,看似很簡單的檔案格式,處理起來卻是非常困難的。本文只是初探一下而已。

詳見 sqlserver 聯機幫助:

主題 說明

query() 方法( xml 資料型別)

此方法用於對 xml 例項進行查詢。

value() 方法( xml 資料型別)

此方法用於從 xml 例項檢索 sql 型別的值。

exist() 方法( xml 資料型別)

此方法用於確定查詢是否返回非空結果。

modify() 方法( xml 資料型別)

此方法用於指定 xml dml 語句以執行更新。

nodes() 方法( xml 資料型別)

此方法用於將 xml 拆分成多行以將 xml 文件的組成部分傳播到行集中。  

閒話少說,首先建立乙個包含 xml 型別的資料表,其次建立乙個 xml 檔案,在服務端把 xml 檔案內容載入該資料表中。

create table visioxml

id  int,

doc xml

go 建立乙個名為 ***.xml 的檔案,內容如下 1

wbq 2

czh

insert into visioxml(id,doc)

select 4,* from openrowset(bulk 'e:\***.xml',single_blob) as x;

-- 以下為 value() 和 query() 的用法

--select * from visioxml where id=4

select

doc.value('(/root/row[1]/id/text())[1]','int') rootrowid1,  -- 第一行 id 的值,並且轉換為 int 型別

doc.value('(/root/row[2]/id/text())[1]','int') rootrowid2,  -- 第二行 id 的值,並且轉換為 int 型別

doc.value('(/root/row[1]/name/text())[1]','varchar(20)') rootrowname1,  -- 第一行 name 的值,並且轉換為 varchar 型別

doc.value('(/root/row[1]/name/@***)[1]','varchar(20)') rootrowname1***, -- 第一行 name 中 *** 屬性的值,並且轉換為 varchar 型別

doc.query('/root') root,              --root 下的所有 xml 內容,型別為 xml

doc.query('/root/row[1]') rootrow1,  --root 下第一行所有的 xml 內容,型別為 xml

doc.query('/root/row[2]') rootrow2   --root 下第二行所有的 xml 內容,型別為 xml

from visioxml

where id=4  

-- 以下為 exist() 函式在兩種環境下的用法

select

doc.exist('/root/row[1]/name[(@*** cast as xs:string?) = xs:string("male")]') row1eqstringmale,

doc.exist('/root/row[1]/name[(@*** cast as xs:string?) = "male"]') row1eqmale,

doc.exist('/root/row[1]/id[(text()[1] cast as xs:float?) = xs:float(1)]') row1eqfloat1,

doc.exist('/root/row[2]/id[(text()[1] cast as xs:float?) = 2]') row1eq1

from visioxml

where id=4  

select id,doc

from visioxml

where id=4

and doc.exist('/root/row[1]/name[(@***)]')=1      -- 第一行 name 中存在 *** 屬性

--and doc.exist('/root/row[1]/name[not(@***)]')=1 -- 第一行 name 中不存在 *** 屬性

--and doc.exist('/root/row[1][not(id/*)]')=1      -- 第一行不存在 id 字段

--and doc.exist('/root/row[1][(id/*)]')=1         -- 第一行存在 id 字段

在sql2005中對不同XML的解析

聯機幫助 ms help eg1.declare idoc int declare doc varchar 4000 set doc 2007 11 22 09 27 04 mod a 21 e145 exec sp xml preparedocument idoc output,doc 形成各節點...

Sql2005中對XML型別欄位的運用

sql2005中對xml型別字段的運用 正文 在sql2005中增加了xml型別資料。這樣,我們可以將我們應用程式中的實體物件直接儲存到資料庫中。下次要取的時候就可以直接將xml反序列化成實體物件。對於資料量不是很大的情況下,可以考慮使用。select from employee where con...

Sql2005中對XML型別欄位的運用

在sql2005中增加了xml型別資料。這樣,我們可以將我們應用程式中的實體物件直接儲存到資料庫中。下次要取的時候就可以直接將xml反序列化成實體物件。對於資料量不是很大的情況下,可以考慮使用。select from employee where content exist age text 900...