Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Per atomizzazione si intende il processo di estrazione del valore tipizzato di un elemento. In determinate circostanze, il processo è implicito. Alcuni operatori XQuery, ad esempio gli operatori aritmetici e di confronto, dipendono da tale processo. Ad esempio, quando si applicano operatori aritmetici direttamente ai nodi, il valore tipizzato di un nodo viene prima recuperato richiamando in modo implicito la funzione di dati. Tale funzione passa il valore atomico come operando all'operatore aritmetico.
Ad esempio, la query seguente restituisce il totale degli LaborHours attributi. In questo caso, data() viene applicato in modo implicito ai nodi dell'attributo.
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)');
Anche se non è necessario, è anche possibile specificare in modo esplicito la data() funzione :
SELECT @x.query('sum(data(ROOT/Location/@LaborHours))');
Un altro esempio di atomizzazione implicita riguarda l'utilizzo di operatori aritmetici. L'operatore + richiede valori atomici e data() viene applicato in modo implicito per recuperare il valore atomico dell'attributo LaborHours . La query viene specificata sulla colonna Instructions del tipo xml nella tabella ProductModel. La query seguente restituisce l'attributo LaborHours tre volte. Nella query prendere in considerazione:
Nella costruzione dell'attributo, l'atomizzazione
OriginalLaborHoursviene applicata in modo implicito alla sequenza singleton restituita da$WC/@LaborHours. Il valore tipizzato dell'attributoLaborHoursviene assegnato aOriginalLaborHours.Nella costruzione dell'attributo, l'operatore
UpdatedLaborHoursV1aritmetico richiede valori atomici. Pertanto,data()viene applicato in modo implicito all'attributoLaborHoursrestituito da$WC/@LaborHours. Successivamente, viene aggiunto il valore atomico 1. La costruzione dell'attributoUpdatedLaborHoursV2mostra l'applicazione esplicita didata(), ma non è obbligatoria.
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;
Il risultato è il seguente:
<WC OriginalLaborHours="2.5"
UpdatedLaborHoursV1="3.5"
UpdatedLaborHoursV2="3.5" />
L'atomizzazione restituisce un'istanza di tipo semplice, un set vuoto o un errore di tipo statico.
L'atomizzazione si verifica anche nei parametri delle espressioni di confronto passati a funzioni, valori restituiti da funzioni, cast() espressioni ed espressioni di ordinamento passate nella clausola order by.