SQLSERVER XML
在 SQLServer2005 中对 XML 的处理功能显然增强了很多,提供了 query(),value(),exist(),modify(),nodes() 等函数。 关于 xml ,难以理解的不是 SQLServer 提供的函数,而是对 xml 本身的理解,看似很简单的文件格式,处理起来却是非常困难的。本文只是初探一下而已。 详见 SQLServer 联机帮助: 主题 ? 闲话少说,首先创建一个包含 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.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 属性 ? ? ? 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/baoqiangwang/archive/2010/03/03/5340948.aspx (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |