コンストラクター関数 (XQuery)
コンストラクター関数は、指定された入力から、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 では、次に示す方法で、コンストラクター関数の呼び出しの際に定数の組み合わせもサポートしています。
引数が文字列リテラルの場合、式はコンパイル時に評価されます。値が型に関する制約を満たしていない場合、静的エラーが発生します。
引数が別の型のリテラルである場合、式はコンパイル時に評価されます。値が型に関する制約を満たしていない場合、空のシーケンスが返されます。
例
このトピックでは、AdventureWorks2008R2 データベースのさまざまな xml 型の列に格納されている XML インスタンスに対して実行する XQuery の例について説明します。これらの各列の概要については、「AdventureWorks2008R2 データベースの xml データ型表現」を参照してください。
A. dateTime() XQuery 関数を使用して、製品の説明の古いバージョンを取得する
この例では、サンプルの XML ドキュメントがまず xml 型の変数に割り当てられます。このドキュメントには 3 つのサンプル <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"/>