构造函数 (XQuery)

从指定的输入中,构造函数将创建任意 XSD 内置或用户定义原子类型的实例。

语法


            TYP($atomicvalue as xdt:anyAtomicType?
            
            ) as TYP?
        

参数

  • $strval
    将被转换的字符串。
  • TYP
    任意内置 XSD 类型。

备注

支持用于基本和派生原子 XSD 类型的构造函数。但是,不支持包括 xdt:yearMonthDuration 和 xdt:dayTimeDurationxs:durationxs:QNamexs:NMTOKENxs:NOTATION 子类型。倘若它们是直接或间接从以下类型中派生的,则相关联的架构集合中提供的用户定义原子类型也可用。

支持的基类型

以下是所支持的基类型:

  • xs:string
  • xs:boolean
  • xs:decimal
  • xs:float
  • xs:double
  • xs:duration
  • xs:dateTime
  • xs:time
  • xs:date
  • xs:gYearMonth
  • xs:gYear
  • xs:gMonthDay
  • xs:gDay
  • xs:gMonth
  • xs:hexBinary
  • xs:base64Binary
  • xs:anyURI
支持的派生类型

以下是所支持的派生类型:

  • xs:normalizedString
  • xs:token
  • xs:language
  • xs:Name
  • xs:NCName
  • xs:ID
  • xs:IDREF
  • xs:ENTITY
  • xs:integer
  • xs:nonPositiveInteger
  • xs:negativeInteger
  • xs:long
  • xs:int
  • xs:short
  • xs:byte
  • xs:nonNegativeInteger
  • xs:unsignedLong
  • xs:unsignedInt
  • xs:unsignedShort
  • xs:unsignedByte
  • xs:positiveInteger

SQL Server 也以以下方式支持构造函数调用的常量折叠:

  • 如果参数为字符串文字,则将在编译期间计算表达式。当该值不满足类型约束时,将生成静态错误。
  • 如果参数为其他类型的文字,将在编译期间计算表达式。当该值不满足类型约束时,将返回空序列。

示例

本主题提供了一些对 XML 实例的 XQuery 示例,这些实例存储在 AdventureWorks 数据库内不同的 xml 类型列中。有关这些列的概述,请参阅 AdventureWorks 数据库中的 xml 数据类型表示形式

A. 使用 dateTime() XQuery 函数检索以前的产品说明

在本示例中,首先将示例 XML 文档分配到 xml 类型变量。此文档包含三个示例 <ProductDescription> 元素,每个元素都包含一个 <DateCreated> 子元素。

然后,查询该变量以便仅检索在特定日期之前创建的那些产品说明。为了进行比较,该查询将使用 xs:dateTime() 构造函数键入日期。

declare @x xml
set @x = '<root>
<ProductDescription ProductID="1" >
  <DateCreated DateValue="2000-01-01T00:00:00Z" />
  <Summary>Some Summary description</Summary>
</ProductDescription>
<ProductDescription  ProductID="2" >
  <DateCreated DateValue="2001-01-01T00:00:00Z" />
  <Summary>Some Summary description</Summary>
</ProductDescription>
<ProductDescription ProductID="3" >
  <DateCreated DateValue="2002-01-01T00:00:00Z" />
  <Summary>Some Summary description</Summary>
</ProductDescription>
</root>'

select @x.query('
     for $PD in  /root/ProductDescription
     where xs:dateTime(data( ($PD/DateCreated/@DateValue)[1] )) < xs:dateTime("2001-01-01T00:00:00Z")
     return
        element Product
       { 
        ( attribute ProductID { data($PD/@ProductID ) },
        attribute DateCreated { data( ($PD/DateCreated/@DateValue)[1] ) } )
        }
 ')

请注意上述查询的以下方面:

  • FOR ...WHERE 循环结构用于检索满足 WHERE 子句中指定的条件的 <ProductDescription> 元素。
  • dateTime() 构造函数用于构造 dateTime 类型值,以便可以将类型值进行适当比较。
  • 然后,该查询将构造得到的 XML。由于构造一系列属性,因此在 XML 构造中要使用逗号和括号。

结果如下:

<Product 
   ProductID="1" 
   DateCreated="2000-01-01T00:00:00Z"/>

请参阅

参考

针对 xml 数据类型的 XQuery 函数

概念

XML 构造 (XQuery)

帮助和信息

获取 SQL Server 2005 帮助