加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

关于SQLServer2005的学习笔记——XML的处理

发布时间:2020-12-12 15:23:58 所属栏目:MsSql教程 来源:网络整理
导读:在 SQLServer2005 中对 XML 的处理功能显然增强了很多,提供了 query(),value(),exist(),modify(),nodes() 等函数。 关于 xml ,难以理解的不是 SQLServer 提供的函数,而是对 xml 本身的理解,看似很简单的文件格式,处理起来却是非常困难的。本文只是初探

主题

说明

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

创建一个名为xxx.xml的文件,内容如下

/*

<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

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/@SEX)[1]','varchar(20)') RootRowNAME1SEX,--第一行NAMESEX属性的值,并且转换为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[(@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

?

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字段

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

SQLServer2005中对XML的处理功能显然增强了很多,提供了query(),value(),exist(),modify(),nodes()等函数。

关于xml,难以理解的不是SQLServer提供的函数,而是对xml本身的理解,看似很简单的文件格式,处理起来却是非常困难的。本文只是初探一下而已。

详见SQLServer联机帮助:

    推荐文章
      热点阅读