分享方式:


建構函式 (XQuery)

適用於:SQL Server

從指定的輸入,建構函式會建立任何 XSD 內建或使用者定義不可部分完成類型的實例。

語法

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

引數

$strval
將轉換的字串。

TYP
任何內建 XSD 類型。

備註

基底和衍生的不可部分完成 XSD 類型支援建構函式。 不過,不支援 xs:duration 子類型,包括 xdt:yearMonthDuration 和 xdt:dayTimeDuration ,以及 xs:QName xs:NMTOKEN xs: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 也支援以下列方式進行建構函式調用的常數折迭:

  • 如果引數是字串常值,則會在編譯期間評估運算式。 當值不符合類型條件約束時,就會引發靜態錯誤。

  • 如果引數是另一種類型的常值,則會在編譯期間評估運算式。 當值不符合型別條件約束時,會傳回空序列。

範例

本主題針對 AdventureWorks 資料庫中各種 xml 類型資料行中儲存的 XML 實例,提供 XQuery 範例。

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 函式