Atomizacja (XQuery)
Atomizacja to proces wyodrębniania wpisaną wartość element.Ten proces jest podany w określonych okolicznościach.Niektóre z operatorów XQuery, takich jak operatory arytmetyczne i porównanie, zależą od tego procesu.Na przykład, stosując operatory arytmetyczne bezpośrednio do węzłów, wpisaną wartość węzła jest najpierw pobierana przez niejawnie Funkcja danych.To przekazuje niepodzielny wartości jako argumentu operatory arytmetyczne.
Na przykład poniższa kwerenda zwraca sumę atrybuty LaborHours.W takim przypadek data() Domyślnie 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)')
Mimo że 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 operatory arytmetyczne.The + operator requires niepodzielny values, and data() is implicitly applied to retrieve the niepodzielny value of the LaborHours atrybut. Określono kwerendę przeciwko kolumna w instrukcjach xml Wpisz w polu tabela ProductModel. Następująca kwerenda zwraca wartość atrybut LaborHours trzy razy.W kwerendzie należy pamiętać o następujących kwestiach:
Przy tworzeniu atrybut OrignialLaborHours, Atomizacja niejawnie dotyczy sekwencji pojedynczych zwrócony przez)$WC/@LaborHours). Przydzielono wpisaną wartość atrybut LaborHours OrignialLaborHours.
Przy tworzeniu atrybut UpdatedLaborHoursV1, operator arytmetyczny wymaga niepodzielny wartości.Dlatego też data() Domyślnie jest stosowane 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 są 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
To jest wynik:
<WC OriginalLaborHours="2.5"
UpdatedLaborHoursV1="3.5"
UpdatedLaborHoursV2="3.5" />
Atomizacja powoduje wystąpienie typu prostego, pustego zestaw lub błąd typu statycznego.
Atomizacja występuje również w parametrach wyrażenie porównania przekazany do funkcji, wartości zwracane przez funkcje cast() wyrażenia i porządkowanie wyrażeń przekazane w kolejności klauzula.
See Also