次の方法で共有


アトミック化 (XQuery)

適用対象: SQL Server

アトミック化とは、アイテムの型指定された値を抽出するプロセスです。 このプロセスは、特定の状況下では暗黙的に行われます。 算術演算子や比較演算子などの一部の 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))')  

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

  • OriginalLaborHours 属性を構築する場合、($WC/@LaborHours) によって返されるシングルトン シーケンスにアトミック化が暗黙的に適用されます。 LaborHours 属性の型指定された値は OriginalLaborHours に割り当てられます。

  • UpdatedLaborHoursV1 属性の構築では、算術演算子がアトミック値を必要とします。 したがって、 data() は、($WC/@LaborHours) によって返される LaborHours 属性に暗黙的に適用されます。 その後、アトミック値 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 句で渡される順序付け式でも発生します。

参照

XQuery の基礎
比較式 (XQuery)
xml データ型に対する XQuery 関数