次の方法で共有


アトミック化 (XQuery)

アトミック化とは、アイテムの型指定された値を抽出するプロセスです。 このプロセスは、特定の環境では暗黙的に実行されます。 算術演算子や比較演算子などの一部の XQuery 演算子は、このプロセスに依存します。 たとえば、算術演算子をノードに直接適用すると、data 関数を暗黙的に呼び出すことにより、ノードの型指定された値が最初に取得されます。 これにより、アトミック値がオペランドとして算術演算子に渡されます。

たとえば、次のクエリは LaborHours 属性の合計を返します。 この場合、data() が属性ノードに暗黙的に適用されます。

declare @x xml
set @x='<ROOT><Location LID="1" SetupTime="1.1" LaborHours="3.3" />
<Location LID="2" SetupTime="1.0" LaborHours="5" />
<Location LID="3" SetupTime="2.1" LaborHours="4" />
</ROOT>'
-- data() implicitly applied to the attribute node sequence.
SELECT @x.query('sum(/ROOT/Location/@LaborHours)')

必須ではありませんが、data() 関数を明示的に指定することもできます。

SELECT @x.query('sum(data(ROOT/Location/@LaborHours))')

暗黙のアトミック化の別の例として、算術演算子を使用するケースがあります。 + 演算子はアトミック値を必要とするので、LaborHours 属性のアトミック値を取得するために data() が暗黙的に適用されます。 ProductModel テーブルの xml 型の Instructions 列に対して、クエリが指定されます。 次のクエリでは、LaborHours 属性を 3 回返します。 このクエリでは、次の点に注意してください。

  • OrignialLaborHours 属性の構築では、($WC/@LaborHours) によって返される単一シーケンスにアトミック化が暗黙的に適用されます。 LaborHours 属性の型指定された値が、OrignialLaborHours に代入されます。

  • UpdatedLaborHoursV1 属性の構築では、算術演算子がアトミック値を必要とします。 そのため、($WC/@LaborHours) によって返される LaborHours 属性に、data() が暗黙的に適用されます。 次に、アトミック値 1 が加算されます。 UpdatedLaborHoursV2 属性の構成では、data() の明示的な適用を示していますが、これは必須ではありません。

SELECT Instructions.query('
     declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
for $WC in /AWMI:root/AWMI:Location[1]
        return
            <WC OriginalLaborHours = "{ $WC/@LaborHours }"
                UpdatedLaborHoursV1 = "{ $WC/@LaborHours + 1 }" 
                UpdatedLaborHoursV2 = "{ data($WC/@LaborHours) + 1 }" >
            </WC>') as Result
FROM Production.ProductModel
where ProductModelID=7

結果を次に示します。

<WC OriginalLaborHours="2.5" 
    UpdatedLaborHoursV1="3.5" 
    UpdatedLaborHoursV2="3.5" />

アトミック化を行うと、結果は単純な型のインスタンス、空のセット、または静的な型エラーになります。

アトミック化は、関数に渡される比較式のパラメーター、関数から返される値、cast() 式、および Order By 句に渡される順序式でも発生します。

関連項目

参照

xml データ型に対する XQuery 関数

概念

比較式 (XQuery)

その他の技術情報

XQuery の基礎