最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于SQLServer2005的學(xué)習(xí)筆記 XML的處理

 更新時間:2010年04月30日 16:38:08   作者:  
在 SQLServer2005 中對 XML 的處理功能顯然增強(qiáng)了很多,提供了 query(),value(),exist(),modify(),nodes() 等函數(shù)。
關(guān)于 xml ,難以理解的不是 SQLServer 提供的函數(shù),而是對 xml 本身的理解,看似很簡單的文件格式,處理起來卻是非常困難的。本文只是初探一下而已。
詳見 SQLServer 聯(lián)機(jī)幫助:
主題
說明
query() 方法( xml 數(shù)據(jù)類型)
此方法用于對 XML 實(shí)例進(jìn)行查詢。
value() 方法( xml 數(shù)據(jù)類型)
此方法用于從 XML 實(shí)例檢索 SQL 類型的值。
exist() 方法( xml 數(shù)據(jù)類型)
此方法用于確定查詢是否返回非空結(jié)果。
modify() 方法( xml 數(shù)據(jù)類型)
此方法用于指定 XML DML 語句以執(zhí)行更新。
nodes() 方法( xml 數(shù)據(jù)類型)
此方法用于將 XML 拆分成多行以將 XML 文檔的組成部分傳播到行集中。

閑話少說,首先創(chuàng)建一個包含 xml 類型的數(shù)據(jù)表,其次創(chuàng)建一個 xml 文件,在服務(wù)端把 xml 文件內(nèi)容加載該數(shù)據(jù)表中。
復(fù)制代碼 代碼如下:

CREATE TABLE VisioXML
(
ID INT,
Doc XML
);
GO

創(chuàng)建一個名為 xxx.xml 的文件,內(nèi)容如下
/*
<ROOT>
<ROW>
<ID>1</ID>
<NAME SEX="MALE">WBQ</NAME>
</ROW>
<ROW>
<ID>2</ID>
<NAME SEX="FEMALE">CZH</NAME>
</ROW>
</ROOT>
*/
INSERT INTO VisioXML(ID,Doc)
SELECT 4,* FROM OPENROWSET(BULK 'e:\xxx.xml',SINGLE_BLOB) AS x;

-- 以下為 value() 和 query() 的用法
--SELECT * FROM VisioXML WHERE ID=4
復(fù)制代碼 代碼如下:

SELECT
Doc.value('(/ROOT/ROW[1]/ID/text())[1]','int') RootRowID1, -- 第一行 ID 的值,并且轉(zhuǎn)換為 int 類型
Doc.value('(/ROOT/ROW[2]/ID/text())[1]','int') RootRowID2, -- 第二行 ID 的值,并且轉(zhuǎn)換為 int 類型
Doc.value('(/ROOT/ROW[1]/NAME/text())[1]','varchar(20)') RootRowNAME1, -- 第一行 NAME 的值,并且轉(zhuǎn)換為 VARCHAR 類型
Doc.value('(/ROOT/ROW[1]/NAME/@SEX)[1]','varchar(20)') RootRowNAME1SEX, -- 第一行 NAME 中 SEX 屬性的值,并且轉(zhuǎn)換為 VARCHAR 類型
Doc.query('/ROOT') Root, --ROOT 下的所有 XML 內(nèi)容,類型為 XML
Doc.query('/ROOT/ROW[1]') RootRow1, --ROOT 下第一行所有的 XML 內(nèi)容,類型為 XML
Doc.query('/ROOT/ROW[2]') RootRow2 --ROOT 下第二行所有的 XML 內(nèi)容,類型為 XML
FROM VisioXML
WHERE ID=4

-- 以下為 exist() 函數(shù)在兩種環(huán)境下的用法
復(fù)制代碼 代碼如下:

SELECT
Doc.exist('/ROOT/ROW[1]/NAME[(@SEX cast as xs:string?) = xs:string("MALE")]') Row1EQStringMale,
Doc.exist('/ROOT/ROW[1]/NAME[(@SEX 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

復(fù)制代碼 代碼如下:

SELECT ID,Doc
FROM VisioXML
WHERE ID=4
AND Doc.exist('/ROOT/ROW[1]/NAME[(@SEX)]')=1 -- 第一行 NAME 中存在 SEX 屬性
--AND Doc.exist('/ROOT/ROW[1]/NAME[not(@SEX)]')=1 -- 第一行 NAME 中不存在 SEX 屬性
--AND Doc.exist('/ROOT/ROW[1][not(ID/*)]')=1 -- 第一行不存在 ID 字段
--AND Doc.exist('/ROOT/ROW[1][(ID/*)]')=1 -- 第一行存在 ID 字段

相關(guān)文章

最新評論

禹州市| 沂源县| 屏南县| 万安县| 花莲市| 岱山县| 周口市| 临潭县| 罗甸县| 内江市| 祁东县| 宁陵县| 奉化市| 安庆市| 贵港市| 海阳市| 靖安县| 武平县| 虹口区| 班戈县| 湘阴县| 安康市| 亚东县| 贵州省| 桑日县| 武冈市| 巩留县| 鲁山县| 吴堡县| 和林格尔县| 黎城县| 河南省| 夹江县| 黄梅县| 眉山市| 民权县| 临朐县| 沭阳县| 宁夏| 宜黄县| 新邵县|