在SQL Server 2005中使用XQuery检索XML数据(一)

日期: 2009-02-08 作者:Robert Sheldon翻译:曾少宁 来源:TechTarget中国 英文

当Microsoft发布SQL Server 2005时,它引进了一个新的数据类型:XML。与其它的SQL Server数据类型一样,你可以使用XML数据类型来定义字段、存储过程和用户自定义方法的变量和参数,并且你可以整体存取XML数据——即作为一个值——就像一个XML文档一样。然而,与XML文档一样,可能有时候当你想存取的只是XML数据中的指定值时,你就需要使用到XQuery了。   XQuery是一个功能强大的、专门为存取XML数据而设计的脚本语言。

SQL Server2005支持一个允许在XML列、变量或参数中存取值的XQuery语言子集。通过调用XML数据类型支持的方法,就可以在Tra……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

当Microsoft发布SQL Server 2005时,它引进了一个新的数据类型:XML。与其它的SQL Server数据类型一样,你可以使用XML数据类型来定义字段、存储过程和用户自定义方法的变量和参数,并且你可以整体存取XML数据——即作为一个值——就像一个XML文档一样。然而,与XML文档一样,可能有时候当你想存取的只是XML数据中的指定值时,你就需要使用到XQuery了。

  XQuery是一个功能强大的、专门为存取XML数据而设计的脚本语言。SQL Server2005支持一个允许在XML列、变量或参数中存取值的XQuery语言子集。通过调用XML数据类型支持的方法,就可以在Transact-SQL语句中使用XQuery。其中两种方法分别是value()和query()——这对于在XML数据中检索指定的元素是特别有用的。

  在本文中,我将阐述这两种方法并分别举例说明。注意,本文假定你已经熟悉T-SQL和SQL Server的XML。

  XML value()方法

  当在Transact-SQL语句中调用XML方法时,需要指定一个XML字段、变量或参数名称,并且在其后面括号中包含一个周期、方法名称以及一个XQuery表达式。比如,在一个命名为XmlInfo的XML字段上调用一个value()方法,你可以使用下面的语法:


  XmlInfo.value(<XQuery expression>)

 
  当你调用方法value()时,该XML方法返回一个指定类型的标量(单一的)值。这个value()方法有两个参数。第一个是检索的元素和值,而第二个是返回值的数据类型。让我们举一个例子来说明它是如何工作的。下面的语句在HumanResources表中的JobCandidateID和Resume字段中检索数据。JobCandidate表格(AdventureWorks示例数据库的一部分):


SELECT JobCandidateID, Resume.value('declare namespace ns=
"http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/Resume";
(/ns:Resume/ns:Name/ns:Name.Last)[1]',
'nvarchar(30)') AS LastName
FROM HumanResources.JobCandidate 

  SELECT列表中的第二字段(Resume)是以XML数据类型定义的。因此,你可以调用任何XML方法。在这里,我调用了value()方法并且传输了两个参数。每个参数都包含在单引号中并且由一个逗号分隔。现在让我们仔细地看一下第一个参数。

  第一个参数被分成两个部分并由分号分隔。第一部分表示的是命名空间并赋予“ns”别名。你必须任意类型化的XML字段指定命名空间。每一个类型化的字段都关联到一个指定的模式。在SQL Server Management Studio中,你可以通过检索XML列中整体值,然后点击返回值来确定与XML文档相关的模式。XML文档打开的是一个单独的窗口,如图1所示。注意,该模式被定义为根元素的属性。

   确定与XML文档关联的模式

  图1:确定与XML文档关联的模式

  当调用value()方法时,在XML文档中列出的模式就是作为命名空间的模式。如果XML字段是非类型化的(未关联到一个模式),那么就不需要声明命名空间,并且可以省略参数的第一部分。

  参数的第二部分定义包含检索的值的XML元素。

  元素基本上是一个由正斜线分隔的路径名称。当处理类型化的XML字段时,你必须先在路径名中的每个节点前加上命令空间别名,然后是冒号。在这里,我在每个节点前加上“ns:”。再次参照图1,你可以在文档的上方附近看到这个元素。

  注意,路径名被包含在括号中并且其后面是[1]。因为value()方法只能返回多个数量值,因此你必须在括号的后面指定[1]以确保只有一个元素实例返回,即使在XML中只有一个实例。在你指定了路径之后,你必须指定数据类型。SQL语句现在就检索每个职位候选人的姓氏并将它作为NVARCHAR数据类型返回。

  与其它的语言一样,XQuery支持广泛的各种不同方法。比如,下面的语句使用的是一个concat方法(在第一个参数的第二个部分)来连接名和姓:


SELECT JobCandidateID, Resume.value('declare namespace ns=
"http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/Resume";
concat((/ns:Resume/ns:Name/ns:Name.First)[1], " ",
(/ns:Resume/ns:Name/ns:Name.Last)[1])',
'nvarchar(60)') AS FullName
FROM HumanResources.JobCandidate 

  concat方法的多个参数是由逗号分隔的。每一个参数都必须串连。注意,第一个和第三个参数使用的是上例中一样的路径架构。更多关于concat方法和所有XQuery方法的信息,可以阅读Microsoft SQL Server 2005 Books Online。

翻译

曾少宁
曾少宁

TechTarget中国特约技术编辑,某高校计算机科学专业教师和网络实验室负责人,曾任职某网络国际厂商,关注数据中心、开发运维、数据库及软件开发技术。有多本关于思科数据中心和虚拟化技术的译著,如《思科绿色数据中心建设与管理》和《基于IP的能源管理》等。

相关推荐