コンストラクター関数 (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 型変数に割り当てられます。 このドキュメントには、<DateCreated
>子要素を含む 3 つのサンプル <ProductDescription
>要素が含まれています。
次に、その変数がクエリされ、指定された日時より前に作成された製品の説明だけを取得します。 比較のために、クエリでは 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"/>