Oharra
Orrialde honetara sartzeak baimena behar du. Saioa hasteko edo direktorioak aldatzen saia zaitezke.
Orrialde honetara sartzeak baimena behar du. Direktorioak aldatzen saia zaitezke.
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
OriginalLaborHoursatomización se aplica implícitamente a la secuencia singleton devuelta por$WC/@LaborHours. El valor con tipo delLaborHoursatributo se asigna aOriginalLaborHours.Al construir el
UpdatedLaborHoursV1atributo , el operador aritmético requiere valores atómicos. Por lo tanto,data()se aplica implícitamente alLaborHoursatributo devuelto por$WC/@LaborHours. A continuación, se le agrega el valor atómico 1. La construcción del atributoUpdatedLaborHoursV2muestra la aplicación explícita dedata(), 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.