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

前端之家收集整理的这篇文章主要介绍了关于SQLServer2005的学习笔记 XML的处理前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

关于 xml ,难以理解的不是 sqlServer 提供的函数,而是对 xml 本身的理解,看似很简单的文件格式,处理起来却是非常困难的。本文只是初探一下而已。 @H_403_0@详见 sqlServer 联机帮助: @H_403_0@主题 @H_4030@说明 @H403_0@query() 方法( xml 数据类型) @H_403_0@此方法用于对 XML 实例进行查询。 @H_403_0@value() 方法( xml 数据类型) @H_403_0@此方法用于从 XML 实例检索 sql 类型的值。 @H_403_0@exist() 方法( xml 数据类型) @H_403_0@此方法用于确定查询是否返回非空结果。 @H_403_0@modify() 方法( xml 数据类型) @H_403_0@此方法用于指定 XML DML 语句以执行更新。 @H_403_0@nodes() 方法( xml 数据类型) @H_403_0@此方法用于将 XML 拆分成多行以将 XML 文档的组成部分传播到行集中。 闲话少说,首先创建一个包含 xml 类型的数据表,其次创建一个 xml 文件,在服务端把 xml 文件内容加载该数据表中。 @H_403_0@<div class="codetitle"><a style="CURSOR: pointer" data="96743" class="copybut" id="copybut96743" onclick="doCopy('code96743')"> 代码如下:

<div class="codebody" id="code96743"> @H_4030@CREATE TABLE VisioXML @H4030@( @H4030@ID INT,@H4030@Doc XML @H4030@); @H4030@GO @H4030@
@H403_0@创建一个名为 xxx.xml 的文件内容如下 @H_4030@/* @H4030@ @H4030@ @H4030@1 @H4030@<NAME SEX="MALE">WBQ @H4030@@H40437@ @H4030@ @H4030@2 @H4030@<NAME SEX="FEMALE">CZH @H4030@@H40437@ @H4030@ @H4030@*/ @H4030@INSERT INTO VisioXML(ID,Doc) @H403_0@SELECT 4, FROM OPENROWSET(BULK 'e:\xxx.xml',SINGLE_BLOB) AS x; -- 以下为 value() 和 query() 的用法 @H_403_0@--SELECT FROM VisioXML WHERE ID=4 @H_403_0@<div class="codetitle"><a style="CURSOR: pointer" data="88457" class="copybut" id="copybut88457" onclick="doCopy('code88457')"> 代码如下:
<div class="codebody" id="code88457"> @H_4030@SELECT @H4030@Doc.value('(/ROOT/ROW[1]/ID/text())[1]','int') RootRowID1,-- 第一行 ID 的值,并且转换为 int 类型 @H4030@Doc.value('(/ROOT/ROW[2]/ID/text())[1]','int') RootRowID2,-- 第二行 ID 的值,并且转换为 int 类型 @H4030@Doc.value('(/ROOT/ROW[1]/NAME/text())[1]','varchar(20)') RootRowNAME1,-- 第一行 NAME 的值,并且转换为 VARCHAR 类型 @H403_0@Doc.value('(/ROOT/ROW[1]/NAME/@SEX)[1]','varchar(20)') RootRowNAME1SEX,-- 第一行 NAME 中 SEX 属性的值,并且转换为 VARCHAR 类型 @H_403_0@Doc.query('/ROOT') Root,--ROOT 下的所有 XML 内容,类型为 XML @H_403_0@Doc.query('/ROOT/ROW[1]') RootRow1,--ROOT 下第一行所有的 XML 内容,类型为 XML @H_403_0@Doc.query('/ROOT/ROW[2]') RootRow2 --ROOT 下第二行所有的 XML 内容,类型为 XML @H_4030@FROM VisioXML @H4030@WHERE ID=4 @H4030@
@H403_0@-- 以下为 exist() 函数在两种环境下的用法 @H_403_0@<div class="codetitle"><a style="CURSOR: pointer" data="66431" class="copybut" id="copybut66431" onclick="doCopy('code66431')"> 代码如下:
<div class="codebody" id="code66431"> @H_4030@SELECT @H4030@Doc.exist('/ROOT/ROW[1]/NAME[(@SEX cast as xs:string?) = xs:string("MALE")]') Row1EQStringMale,@H4030@Doc.exist('/ROOT/ROW[1]/NAME[(@SEX cast as xs:string?) = "MALE"]') Row1EQMale,@H4030@Doc.exist('/ROOT/ROW[1]/ID[(text()[1] cast as xs:float?) = xs:float(1)]') Row1EQfloat1,@H4030@Doc.exist('/ROOT/ROW[2]/ID[(text()[1] cast as xs:float?) = 2]') Row1EQ1 @H4030@FROM VisioXML @H4030@WHERE ID=4 @H4030@
@H403_0@<div class="codetitle"><a style="CURSOR: pointer" data="5952" class="copybut" id="copybut5952" onclick="doCopy('code5952')"> 代码如下:
<div class="codebody" id="code5952"> @H_4030@SELECT ID,Doc @H4030@FROM VisioXML @H4030@WHERE ID=4 @H403_0@AND Doc.exist('/ROOT/ROW[1]/NAME[(@SEX)]')=1 -- 第一行 NAME 中存在 SEX 属性 @H_403_0@--AND Doc.exist('/ROOT/ROW[1]/NAME[not(@SEX)]')=1 -- 第一行 NAME 中不存在 SEX 属性 @H_4030@--AND Doc.exist('/ROOT/ROW[1][not(ID/*)]')=1 -- 第一行不存在 ID 字段 @H4030@--AND Doc.exist('/ROOT/ROW[1][(ID/*)]')=1 -- 第一行存在 ID 字段 @H403_0@

SQLServer2005XML学习笔记学习笔记

猜你在找的MsSQL相关文章