建構函式 (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"/>