Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Atomisering är processen för att extrahera det typerade värdet för ett objekt. Den här processen är underförstådd under vissa omständigheter. Vissa av XQuery-operatorerna, till exempel aritmetiska operatorer och jämförelseoperatorer, är beroende av den här processen. När du till exempel använder aritmetiska operatorer direkt på noder hämtas först det typbeskrivna värdet för en nod genom att implicit anropa -datafunktionen. Detta skickar atomvärdet som en operand till den aritmetiska operatorn.
Följande fråga returnerar till exempel summan av attributen LaborHours . I det här fallet data() tillämpas implicit på attributnoderna.
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)');
Även om det inte krävs kan du också uttryckligen ange funktionen data() :
SELECT @x.query('sum(data(ROOT/Location/@LaborHours))');
Ett annat exempel på implicit atomisering är när du använder aritmetiska operatorer. Operatorn + kräver atomiska värden och data() används implicit för att hämta attributets LaborHours atomiska värde. Frågan anges mot kolumnen Instruktioner i xml- typ i tabellen ProductModel. Följande fråga returnerar attributet LaborHours tre gånger. Tänk på följande i frågan:
När attributet skapas
OriginalLaborHourstillämpas atomisering implicit på den singleton-sekvens som returneras av$WC/@LaborHours. Attributets typade värdeLaborHourstilldelas tillOriginalLaborHours.När attributet
UpdatedLaborHoursV1skapas kräver den aritmetiska operatorn atomiska värden.data()Därför tillämpas implicit på attributetLaborHourssom returneras av$WC/@LaborHours. Atomvärdet 1 läggs sedan till i det. Attributets konstruktionUpdatedLaborHoursV2visar den explicita tillämpningen avdata(), men krävs inte.
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;
Här är resultatet:
<WC OriginalLaborHours="2.5"
UpdatedLaborHoursV1="3.5"
UpdatedLaborHoursV2="3.5" />
Atomiseringen resulterar i en instans av en enkel typ, en tom uppsättning eller ett statiskt typfel.
Atomisering sker också i jämförelseuttrycksparametrar som skickas till funktioner, värden som returneras av funktioner, cast() uttryck och ordningsuttryck som skickas i order by-satsen.