Udostępnij za pośrednictwem


Atomizacja (XQuery)

Atomizacja jest proces wyodrębniania wpisaną wartość element.Ten proces jest wprost w określonych okolicznościach.Niektóre podmioty gospodarcze XQuery, takie jak operatory arytmetyczne i porównanie zależą od tego procesu.Na przykład po zastosowaniu operatory arytmetyczne bezpośrednio do węzłów, wpisaną wartość węzła jest najpierw pobranie niejawnie wywołując danych funkcja.Jako operand operator arytmetyczny to przekazuje wartość niepodzielny.

Na przykład poniższa kwerenda zwraca sumę atrybutów LaborHours.W takim przypadek data() niejawnie zostanie zastosowany do węzłów atrybut.

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)')

Chociaż nie jest to wymagane, można także jawnie określić data() funkcja:

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

Innym przykładem Atomizacja niejawne jest używać operatorów arytmetycznych.+ Operator wymaga wartości niepodzielny i data() niejawnie zastosowano pobrać niepodzielny wartość atrybut LaborHours.Kwerenda jest określona przed instrukcjami kolumna z xml Typ w tabela ProductModel.Następująca kwerenda zwraca atrybut LaborHours trzy razy.W kwerendzie należy pamiętać o następujących czynnikach:

  • Przy konstruowaniu atrybut OrignialLaborHours, Atomizacja niejawnie jest stosowany do sekwencji singleton zwróconej przez ($WC/@LaborHours).Przydzielono wpisaną wartość atrybut LaborHours OrignialLaborHours.

  • Przy konstruowaniu atrybut UpdatedLaborHoursV1, operator arytmetyczny wymaga wartości niepodzielny.Dlatego data() niejawnie jest stosowany do atrybut LaborHours, który jest zwracany przez ($WC/@LaborHours).Następnie dodaje się do niego niepodzielny wartość 1.Budowa atrybut UpdatedLaborHoursV2 przedstawiono jawne stosowania data(), ale nie jest wymagane.

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

Jest to wynikiem:

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

Atomizacja wyniki w instancji typu prostego, pustego zestaw lub błąd typu statycznego.

Atomizacja występuje również w parametrach wyrażenie porównania przekazany do funkcji i wartości zwracane przez funkcje, cast() wyrażeń i zamawiania wyrażeń przekazany w kolejności według klauzula.