次の方法で共有


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

適用対象: SQL Server

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

構文

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

引数

$strval
変換される文字列。

TYP
任意の組み込み XSD 型。

解説

コンストラクターは基本データ型、および派生されたアトミック XSD 型に対してサポートされています。 ただし、 xs:duration のサブタイプ ( xdt:yearMonthDuration、xdt:dayTimeDurationxs:QNamexs: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"/>  

参照

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