关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » SQL Server »SQL Server 2005中的新XML功能

    SQL Server 2005中的新XML功能

    2015-11-26 00:00:00 出处:ITJS
    分享

    目前,很多开发人员都将SQL Server 2005作为应用程序数据库。这其中的原因是多方面的,例如开发习惯、功能强大、易于上手、对于既有开发技术的支持等。为了帮助广大读者熟悉SQL Server 2005,本文重点对SQL Server 2005提供的新XML功能进行讲解。在讲解之前,首先了解有关的基本概念。

    由于SQL Server 2000是在服务器中利用BLOB字段存储XML文本,所以不能以原格式真正使用或者引用服务器中的XML。为了使用SQL Server 2000中的XML,必须将XML抽取到应用程序层,然后使用XML语法分析程序或者文档对象模型来使用数据。

    SQL Server 2005的XML数据类型避免了这种限制,因为该类型被实现为最好原数据类型。新的数据类型可使SQL Server如同理解整型或者字符串数据那样相同的方式理解XML数据。使用XML数据类型可创建仅存储XML,或者存储XML和关系型数据的表。这种灵活性使得开发人员对结构化数据使用关系型模型,同时利用XML的半结构化数据增强该数据。当以XML数据类型列存储XML值时,有两种选择:一种是使用类型化列,在这种类型列中存储的XML数据使用XML架构集合来确保有效性。另一种是非类型化列:在这种类型列中,只要XML数据格式良好,则能够插入任何类型的XML数据。

    为帮助开发人员最有效的结合半结构化和关系型数据,SQL Server 2005的XML数据类型支持多个实现查询和修改XML数据的内建方法。这些方法可接受XQuery,它是新兴的W3C标准语言,同时还包括XPath 2.0。开发人员可以将对于XML数据类型方法的查询调用与创建查询,返回关系型和XML数据的标准T-SQL一起使用。

    除了XML数据类型以外,FOR XML和OpenXML功能在SQL Server 2005中也得到了扩展。这些功能共同支持XQuery,这样SQL Server 2005就能够通过一个功能强大的平台来实现利用半结构化数据开发富应用程序,以及非结构化数据的管理。使用所有这些添加的功能,开发人员对于数据存储和应用程序开发则有了更多的选择。下面首先介绍SQL Server 2005中的FOR XML功能。

    1、SQL Server 2005中的FOR XML功能

    SQL Server 2000为SELECT语句引入了FOR XML子句。FOR XML子句能够将SELECT语句返回的关系型行集合聚合为XML数据。如下所示,服务器中的FOR XML支持三种模式,这些模式提供了不同的转换方式:

    RAW:RAW模式为每行都生成名为row的单个元素。

    SELECT (SELECT * FROM HumanResources.Employee as Employee FOR XML AUTO, TYPE).query( '{ for $c in /Employee return }')    上面的查询将生成如下输出:

    一旦创建CustomerSchema,那么就可以轻松的将其与Customer表的XmlData列关联起来,语法如下:

    CREATE TABLE Customer(ID int primary key, XmlData XML(CustomerSchema))

    当将值插入Customer表中,XmlData列中的XML数据将根据CustomerSchema进行验证:

    Insert into Customer values(1, 'http://www.wrox.com/books">Joe') GO Insert into Customer values(2, 'http://www.wrox.com/books">Fred')

    在将架构与XML列关联时,开发人员可以使用DOCUMENT或者CONTENT标志来设置是否能够在类型化列中存储XML树或者片段。对于DOCUMENT而言,每个XML实例都会根据用来对其进行验证和类型化的命名控件,设置实例中顶级元素的目标命名空间。另一方面,对于CONTENT而言,每个顶级元素都能够在架构集合中设置任一目标命名空间。在生成实例过程中,将根据目标命名空间验证XML实例。例如,开发人员可执行以下包括无效命名空间声明的SQL语句:

    Insert into Customer values(3, 'http://invalidnamespace/books">InvalidData') GO

    由于Insert语句中包括无效的命名空间,所以应该看到类似如下的错误消息:

    Msg 6913, Level 16, State 1, Line 1 XML Validation: Declaration not found for element 'http://invalidnamespace/books:customer'. Location: /*:customer[1]

    3.4 将数据插入XML数据类型列

    无论XML列是类型化还是非类型化,开发人员都可采用以下方式为XML列提供值:(1)作为可隐式转换为XML数据类型的字符或者二进制SQL类型;(2)作为文件内容;(3)作为可生成XML数据类型实例的,包括TYPE指令的FOR XML语句输出。

    提供的值必须经过格式良好的验证,这样才能存储XML文档和XML片段。假如数据未通过格式良好验证,那么将显示适当的错误消息来拒绝。对于类型化XML,检测提供的值是为了XML架构集合中XML架构测定XML列的一致性要求。假如验证失败,则拒绝XML实例。下面查看一下将值插入XML列中不同方法的示例:

    首先,以下语句将整数列ID的值2和XmlData列的实例作为新行插入Customer表中。以字符串形式提供的实例会被隐式转换为XML数据类型,同时在插入过程中检测其是否格式良好:
    INSERT INTO Customer values (2, 'http://www.wrox.com/books">Joe')

    正如前文提到的,对于Insert命令,还可能利用XML文件内容作为输入。以下XML文档存储在名为Customer.xml文件中:

    Dave      假如执行以下T-SQL命令,将把Customer.xml文件内容加载到XmlData列中:
    INSERT INTO Customer SELECT 7, xml_value FROM (SELECT * FROM OPENROWSET (BULK 'C:DataCustomer.xml', SINGLE_BLOB) AS xml_value) AS R(xml_value)

    对于Insert命令而言,第三种方式是利用包括TYPE指令的FOR XML的输出作为输入。在SQL Server 2005中,使用包括TYPE指令的FOR XML能够将结果生成为XML数据类型实例。XML结果能够赋值给XML列,变量或者参数。在以下语句中,使用FOR XML TYPE将生成的XML实例赋值给XML数据类型变量@var。然后,在INSERT语句中使用该变量:
    DECLARE @var xml SET @var = (SELECT XmlData FROM Customer FOR XML AUTO,TYPE) -- 将变量值插入新表CustomerOutput中 CREATE TABLE CustomerOutput (XmlData xml) INSERT INTO CustomerOutput (XmlData) VALUES (@var)

    3.5 XML数据类型方法

    虽然XML数据类型是内置数据类型,但是通过提供一些查询和更新存储在XML变量或者列中数据的方法,它的功能类似于用户定义数据类型(UDT)。开发人员可使用这些方法查询,获取标量值,以及修改存储在变量,列或者参数中的XML文档。下表列举了XML数据类型方法 。

    4、小结

    由于XML在计算机世界中是一种无孔不入的语言,所以SQL Server 2005和ADO.NET对XML提供功能丰富的内置支持是合乎逻辑的。本文展示了SQL Server 2005的XML功能。假如正确使用,那么这些XML功能可为整个架构带来有意义的变化。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    帝国CMS7.5编辑器上传图片取消宽高的三种方法

    帝国cms如何自动生成缩略图的实现方法

    Windows 12即将到来,将彻底改变人机交互

    帝国CMS 7.5忘记登陆账号密码怎么办?可以phpmyadmin中重置管理员密码

    帝国CMS 7.5 后台编辑器换行,修改回车键br换行为p标签

    Windows 11 版本与 Windows 10比较,新功能一览

    Windows 11激活产品密钥收集及专业版激活方法

    IT头条

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    严重缩水!NVIDIA将推中国特供RTX 5090 DD:只剩24GB显存

    00:17

    无线路由大厂 TP-Link突然大裁员:补偿N+3

    02:39

    Meta 千万美金招募AI高级人才

    00:22

    技术热点

    微软已修复windows 7/windows 8.1媒体中心严重漏洞 用户可下载安

    卸载MySQL数据库,用rpm如何实现

    windows 7中使用网上银行或支付宝支付时总是打不开支付页面

    一致性哈希算法原理设计

    MySQL数字类型中的三种常用种类

    如何解决SQL Server中传入select语句in范围参数

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。