Partekatu bidez


Atomización (XQuery)

Se aplica a:SQL Server

La atomización es un proceso que consiste en extraer el valor con tipo de un elemento. Este proceso se produce en determinadas circunstancias. Algunos de los operadores XQuery, como los aritméticos y los de comparación, dependen de este proceso. Por ejemplo, al aplicar operadores aritméticos directamente a los nodos, el valor con tipo de un nodo primero se recupera invocando implícitamente la función de datos. De esta manera, el valor atómico se pasa al operador aritmético como un operando.

Por ejemplo, la consulta siguiente devuelve el total de los LaborHours atributos. En este caso, data() se aplica implícitamente a los nodos de atributo.

DECLARE @x AS 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)');

Aunque no es necesario, también puede especificar explícitamente la data() función :

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

Otro ejemplo de atomización implícita se produce al utilizar operadores aritméticos. El + operador requiere valores atómicos y data() se aplica implícitamente para recuperar el valor atómico del LaborHours atributo. La consulta se especifica en la columna Instrucciones del tipo xml de la tabla ProductModel. La consulta siguiente devuelve el LaborHours atributo tres veces. En la consulta, tenga en cuenta lo siguiente:

  • Al construir el atributo , la OriginalLaborHours atomización se aplica implícitamente a la secuencia singleton devuelta por $WC/@LaborHours. El valor con tipo del LaborHours atributo se asigna a OriginalLaborHours.

  • Al construir el UpdatedLaborHoursV1 atributo , el operador aritmético requiere valores atómicos. Por lo tanto, data() se aplica implícitamente al LaborHours atributo devuelto por $WC/@LaborHours. A continuación, se le agrega el valor atómico 1. La construcción del atributo UpdatedLaborHoursV2 muestra la aplicación explícita de data(), pero no es necesaria.

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;

Este es el resultado:

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

La atomización da lugar a una instancia de tipo simple, un conjunto vacío o un error de tipo estático.

La atomización también se produce en los parámetros de expresión de comparación pasados a funciones, valores devueltos por funciones, cast() expresiones y expresiones de ordenación pasadas en la cláusula order by.