Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Atomizace je proces extrahování typové hodnoty položky. Tento proces se předpokládá za určitých okolností. Některé z operátorů XQuery, jako jsou aritmetické a relační operátory, závisí na tomto procesu. Pokud například použijete aritmetické operátory přímo na uzly, zadaná hodnota uzlu se nejprve načte implicitně vyvoláním datové funkce . Tím se atomická hodnota předá jako operand aritmetickému operátoru.
Například následující dotaz vrátí celkový součet LaborHours atributů. V tomto případě data() se implicitně použije na uzly atributů.
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)');
I když to není povinné, můžete také explicitně zadat data() funkci:
SELECT @x.query('sum(data(ROOT/Location/@LaborHours))');
Dalším příkladem implicitní atomizace je použití aritmetických operátorů. Operátor + vyžaduje atomické hodnoty a data() implicitně se použije k načtení atomické hodnoty atributu LaborHours . Dotaz je určen pro sloupec Pokyny xml typ v tabulce ProductModel. Následující dotaz třikrát vrátí LaborHours atribut. V dotazu zvažte:
Při vytváření atributu
OriginalLaborHoursje atomizace implicitně použita na jednotonové sekvence vrácené$WC/@LaborHours. Zadaná hodnota atributuLaborHoursje přiřazenaOriginalLaborHours.Při vytváření atributu
UpdatedLaborHoursV1vyžaduje aritmetický operátor atomické hodnoty.data()Proto se implicitně použije naLaborHoursatribut vrácený$WC/@LaborHours. Atomická hodnota 1 se pak přidá do ní. Konstrukce atributuUpdatedLaborHoursV2ukazuje explicitní použitídata(), ale není vyžadováno.
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;
Tady je výsledek:
<WC OriginalLaborHours="2.5"
UpdatedLaborHoursV1="3.5"
UpdatedLaborHoursV2="3.5" />
Atomizace vede k výskytu jednoduchého typu, prázdné sady nebo chyby statického typu.
Atomizace se také vyskytuje v parametrech porovnávacího výrazu předaných funkcím, hodnotám vráceným funkcemi, cast() výrazy a řazení výrazů předaných v klauzuli order by.
Související obsah
- základy XQuery
- porovnání výrazů (XQuery)
- funkce XQuery proti datového typu XML