コンストラクター関数 (XQuery)

適用対象:SQL Server

コンストラクター関数は、指定された入力から、XSD の組み込みのアトミック型またはユーザー定義のアトミック型のインスタンスを生成します。

構文

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

引数

$strval
変換される文字列。

標準
任意の組み込み XSD 型。

解説

コンストラクターは基本データ型、および派生されたアトミック XSD 型に対してサポートされています。 ただし、 xs:duration のサブタイプ ( xdt:yearMonthDuration と xdt:dayTimeDurationxs: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では、次の方法で構築関数呼び出しの定数フォールディングもサポートされます。

  • 引数が文字列リテラルの場合、コンパイル時に式が評価されます。 値が型に関する制約を満たしていない場合、静的エラーが発生します。

  • 引数が別の型のリテラルである場合、式はコンパイル時に評価されます。 値が型制約を満たさない場合は、空のシーケンスが返されます。

このトピックでは、AdventureWorks データベースのさまざまな xml 型列に格納されている XML インスタンスに対する XQuery の例を示します。

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"/>  

参照

XML の構築 (XQuery)
xml データ型に対する XQuery 関数