热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

SQLServer2005的XML数据类型之基础篇

一、引言如今,在SQLServer2005中,XML成为第一流的数据类型。借助于基于XML模式的强类型化支撑和基于服务器真个XML数据校验功效,现在,开发者可以对存储的XML文档进行轻松地远程

一、引言

如今,在SQL Server 2005中,XML成为第一流的数据类型。借助于基于XML模式的强类型化支撑和基于服务器真个XML数据校验功效,现在

,开发者可以对存储的XML文档进行轻松地远程修正。作为数据库开发者,很多人都必需大批地涉及XML。

如今,在SQL Server 2005中,你能以一种新的数据类型的情势把XML存储在数据库中。

事实上,在SQL Server 2000中就已经包含了一些XML特点。其中,最要害的特点是应用FOR XML语句以XML情势返回成果。SQL Server 2005

的功效则明显不同。在SQL Server 2005中,XML是一种真正的数据类型;这意味着,你可以应用XML作为表和视图中的列,XML可以用于T-SQL语

句中或作为存储过程的参数。现在,你可以直接在数据库中存储、查询和治理XML文件。

更重要的是,现在你还能规定你的XML必需服从的模式。

在SQL Server 2005中,除了供给机制以校验你的数据库中的XML类型之外,它还答应你描写要被存储的复杂数据类型并且供给一个引擎来

强迫施加这些规矩。

二、应用XML数据类型

实在,XML数据类型与SQL Server中的其它数据类型并不存在基本的差别。你可以把它用在应用任何普通SQL数据类型的处所。例如,下列

语句创立一个XML变量并用一个XML填充它:

DECLARE @doc XML

SELECT @doc = '<Team name="Braves" />'

另外,你还可以应用一个查询和SQL Server的FOR XML语法来填充一个XML变量:

SELECT @doc =

(SELECT * FROM Person.Contact FOR XML AUTO)

XML数据类型不仅可以作为变量应用,也可以利用于表列中。你还能分配缺省值并且支撑NOT NULL束缚:

以下为引用的内容:

CREATE TABLE Team
(
TeamID int identity not null,
TeamDoc XML DEFAULT '<Team />' NOT NULL

留心:SQL Server 2005的XML功效与SQL Server 2000中具有明显的不同。

把XML数据插进到表格中只需要用字符串情势的XML指定即可。

下列示例插进一组记录:

以下为引用的内容:

INSERT INTO Team (TeamDoc)
VALUES ('
<Team name="Braves">
<Players>
<Pitcher name="John Smoltz"
role="Closer"/>
</Players>
</Team>');
INSERT INTO Team (TeamDoc)
VALUES ('
<Team name="Red Sox">
<Players>
<Pitcher name="Petro Martinez"
role="Starter"/>
</Players>
</Team>');

当在SQL Server 2005中创立XML的实例时,唯一的转换是从一个字符串转换成一个XML类型。同样,沿着相反的方向,你只可以把XML类型

转换成一个字符串类型。在text和ntext类型之间转换是不答应的。

三、XML数据类型的限制

尽管在SQL Server 2005中XML数据类型就象很多其它数据类型一样看待,但是还存在一些如何应用它的具体限制。这些限制是:

· XML类型不能转换成text或ntext数据类型。

· 除了string类型,没有其它数据类型能够转换成XML。

· XML列不能利用于GROUP BY语句中。

· 散布式局部(partitioned)视图不能包含XML数据类型。

· sql_variant实例的应用不能把XML作为一种子类型。

· XML列不能成为主键或外键的一部分。

· XML列不能指定为唯一的。

· COLLATE子句不能被应用在XML列上。

· XML列不能参加到规矩中。

· 唯一可利用于XML列的内置标量函数是ISNULL和COALESCE。没有任何其它内置标量函数支撑应用XML类型。

· 表中最多只能拥有32个XML列。

· 具有XML列的表不能有一个超过15列的主键。

· 具有XML列的表不能有一个timestamp数据类型作为它们的主键的一部分。

· 存储在数据库中的XML仅支撑128级的层次。

四、XML类型方法

到此为止,上面的示例已经展现了XML数据类型仅能用作一种blob类型数据,但是这正是XML数据类型显示其自身力量的处所。XML数据类型

支撑应用UDT点(myXML.operation())语法进行调用的若干方法。下表1中列举出所支撑的方法。

表格1:XML数据类型方法。

方法名 描写

query  履行一个XML查询并且返回查询的成果

exists  履行一个XML查询,并且假如有成果的话返回值1

value  盘算一个查询以从XML中返回一个简略的值

modify  在XML文档的适当地位履行一个修正把持

nodes  答应你把XML分解到一个表结构中

在下面几节中,你要应用一个表Team,它的每一个行中包含一个小组的名字。在每一行中,有一个包含有关于该小组的XML数据的TeamDoc

行:

以下为引用的内容:

CREATE TABLE Team
(
TeamID int identity not null,
TeamDoc XML DEFAULT '<Team />' NOT NULL
)

在这些例子中,我们假定下面的XML文档存在于表中的Braves行中:

<Team name="Braves">
<Players>
<Pitcher name="John Smoltz" role="Closer"/>
<Pitcher name="Russ Ortiz" role="Starter" />
<ThirdBase name="Chipper Jones"
role="Starter" bats="switch"/>
</Players>
</Team> 

query方法

留心:你可以在表和视图列、T-SQL语句或存储过程的参数中应用XML。

这个方法答应你指定一个要盘算的Xquery或XPath表达式,该方法的成果是一个XML数据类型对象。它的具体语法情势如下:

query(XQuery)

第一个参数总是一个Xquery表达式。下面的例子应用一个查询来返回一个XML文档-其中包含有关每一个小组的投球手的信息:

SELECT TeamDoc.query('/Team/Players/Pitcher')

FROM Team

这个语句产生如下成果:

以下为引用的内容:
----------------------------------------------
<Pitcher name="John Smoltz" role="Closer" />
<Pitcher name="Russ Ortiz" role="Starter" />
(1 row(s) affected)

这个query方法答应你查询和返回与你指定的表达式相匹配的结点列表。该方法的真正威力来自于XQuery语法,我们将在本文后面再具体讨

论。

exist方法

这个exist方法用于决定是否一个查询能够产生任何成果。这个exist方法的语法情势如下:

exist(XQuery)

当你应用这个exist方法时,它盘算这个XQuery查询,并且假如该查询产生任何成果的话返回值1。例如,下面语句查询小组表行中是否

TeamDoc域中存有Starter投手:

下面是简略的Exist语句:

以下为引用的内容:
SELECT Count(*)
FROM Team
WHERE TeamDoc.exist(
'/Team/Players/Pitcher[@role="Starter"]') = 1

value方法

推荐阅读
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • 基于Java和JSP的电子医疗记录管理平台
    随着信息技术的快速发展,各类管理系统已在各行各业得到广泛应用。传统的人工管理模式已逐渐无法满足现代需求。本文介绍了一种基于Java和JSP技术开发的电子医疗记录管理平台,旨在提高医疗行业的信息化水平和管理效率。该平台通过整合先进的数据库技术和Web开发框架,实现了医疗记录的高效存储、查询和管理,为医护人员提供了便捷的操作界面和强大的数据支持。 ... [详细]
  • 在数据库管理中,计算字段(也称为计算列)是一种重要的技术手段。计算字段通过在表定义中使用表达式或函数,自动生成并存储计算结果,从而提高查询效率和数据一致性。本文将详细介绍计算字段的创建方法、优化技巧及其在实际应用中的案例,帮助读者更好地理解和运用这一功能。 ... [详细]
  • 最近,我在CentOS 5服务器上成功部署了GForge 5.7 Community Edition。与Advanced Server版本相比,虽然功能略有简化,但仍然能够满足大多数开源项目管理的需求。为了确保数据安全,我开发了一套全自动备份脚本,该脚本能够定期备份GForge的数据和配置文件,并将其存储在远程服务器上,以防止数据丢失。此外,该脚本还具备错误检测和日志记录功能,便于故障排查和维护。 ... [详细]
  • Spring Boot 实战(一):基础的CRUD操作详解
    在《Spring Boot 实战(一)》中,详细介绍了基础的CRUD操作,涵盖创建、读取、更新和删除等核心功能,适合初学者快速掌握Spring Boot框架的应用开发技巧。 ... [详细]
  • 深入解析:Explain命令的应用与字段详解
    深入解析:Explain命令的应用与字段详解 ... [详细]
  • 本文详细解析了如何使用 jQuery 实现一个在浏览器地址栏运行的射击游戏。通过源代码分析,展示了关键的 JavaScript 技术和实现方法,并提供了在线演示链接供读者参考。此外,还介绍了如何在 Visual Studio Code 中进行开发和调试,为开发者提供了实用的技巧和建议。 ... [详细]
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • 如何使用Python高效绘制矩形图形
    本文详细介绍了如何利用Python的Turtle库高效绘制矩形图形,适合初学者快速上手。通过具体示例代码,帮助读者理解Turtle库的基本绘图方法和技巧,同时探讨了在不同应用场景中绘制矩形的实际操作,为后续复杂图形的绘制打下坚实基础。 ... [详细]
  • Spring框架入门指南:专为新手打造的详细学习笔记
    Spring框架是Java Web开发中广泛应用的轻量级应用框架,以其卓越的功能和出色的性能赢得了广大开发者的青睐。本文为初学者提供了详尽的学习指南,涵盖基础概念、核心组件及实际应用案例,帮助新手快速掌握Spring框架的核心技术与实践技巧。 ... [详细]
  • 浅析PHP中$_SERVER[
    在PHP后端开发中,`$_SERVER["HTTP_REFERER"]` 是一个非常有用的超级全局变量,它可以获取用户访问当前页面之前的URL。本文将详细介绍该变量的使用方法及其在不同场景下的应用,如页面跳转跟踪、安全验证和用户行为分析等。通过实例解析,帮助开发者更好地理解和利用这一功能。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 从用户转型为开发者:一场思维升级的旅程 | 专访 StarRocks Committer 周威
    从用户转变为开发者,不仅是一次角色的转换,更是一场深刻的思维升级之旅。本次专访中,StarRocks Committer 周威分享了他如何在这一过程中逐步提升技术能力与思维方式,为开源社区贡献自己的力量。 ... [详细]
  • Java 零基础入门:SQL Server 学习笔记(第21篇)
    Java 零基础入门:SQL Server 学习笔记(第21篇) ... [详细]
  • Java并发环境下如何确保数据添加的唯一性? ... [详细]
author-avatar
季末-心愫如弦
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有