Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Van toepassing op:SQL Server
Atomisatie is het proces van het extraheren van de getypte waarde van een item. Dit proces wordt onder bepaalde omstandigheden geïmpliceerd. Sommige XQuery-operators, zoals rekenkundige en vergelijkingsoperatoren, zijn afhankelijk van dit proces. Wanneer u bijvoorbeeld rekenkundige operatoren rechtstreeks toepast op knooppunten, wordt de getypte waarde van een knooppunt eerst opgehaald door impliciet de gegevensfunctie aan te roepen. Hiermee wordt de atomische waarde als een operand doorgegeven aan de rekenkundige operator.
De volgende query retourneert bijvoorbeeld het totaal van de LaborHours kenmerken. In dit geval data() wordt impliciet toegepast op de kenmerkknooppunten.
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)');
Hoewel dit niet vereist is, kunt u ook expliciet de data() functie opgeven:
SELECT @x.query('sum(data(ROOT/Location/@LaborHours))');
Een ander voorbeeld van impliciete atomen is wanneer u rekenkundige operatoren gebruikt. De + operator vereist atomische waarden en data() wordt impliciet toegepast om de atomische waarde van het LaborHours kenmerk op te halen. De query wordt opgegeven in de kolom Instructies van het XML-type in de tabel ProductModel. De volgende query retourneert het LaborHours kenmerk drie keer. Overweeg het volgende in de query:
Bij het samenstellen van het
OriginalLaborHourskenmerk wordt atomen impliciet toegepast op de singleton-reeks die wordt geretourneerd door$WC/@LaborHours. De getypte waarde van hetLaborHourskenmerk wordt toegewezen aanOriginalLaborHours.Voor het samenstellen van het
UpdatedLaborHoursV1kenmerk zijn atomische waarden vereist voor de rekenkundige operator.data()Daarom wordt impliciet toegepast op hetLaborHourskenmerk dat wordt geretourneerd door$WC/@LaborHours. De atomische waarde 1 wordt er vervolgens aan toegevoegd. De constructie van het kenmerkUpdatedLaborHoursV2toont de expliciete toepassing vandata(), maar is niet vereist.
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;
Dit is het resultaat:
<WC OriginalLaborHours="2.5"
UpdatedLaborHoursV1="3.5"
UpdatedLaborHoursV2="3.5" />
De atomisatie resulteert in een exemplaar van een eenvoudig type, een lege set of een statische typefout.
Atomisatie vindt ook plaats in vergelijkingsexpressieparameters die worden doorgegeven aan functies, waarden die worden geretourneerd door functies, cast() expressies en volgorde-expressies die zijn doorgegeven in de volgorde per component.