Funzioni per estensioni XQuery - sql:variable()
Si applica a:SQL Server
Espone in un'espressione XQuery una variabile che contiene un valore SQL relazionale.
Sintassi
sql:variable("variableName") as xdt:anyAtomicType?
Osservazioni:
Come descritto nell'argomento Associazione di dati relazionali all'interno di XML, è possibile usare questa funzione quando si usano metodi con tipo di dati XML per esporre un valore relazionale all'interno di XQuery.
Ad esempio, il metodo query() viene usato per specificare una query su un'istanza XML archiviata in una variabile o colonna di tipo di dati xml . In alcuni casi, è anche possibile che la query usi valori di una variabile Transact-SQL o di un parametro per riunire dati relazionali e XML. A tale scopo, usare la funzione sql:variable .
Verrà eseguito il mapping tra il valore SQL e un valore XQuery corrispondente e il relativo tipo sarà un tipo di base XQuery equivalente al tipo SQL corrispondente.
È possibile fare riferimento a un'istanza xml solo nel contesto dell'espressione di origine di un'istruzione insert XML-DML. In caso contrario, non è possibile fare riferimento a valori di tipo xml o clR (Common Language Runtime) definiti dall'utente.
Esempi
R. Utilizzo della funzione sql:variable() per convertire in XML il valore di una variabile Transact-SQL
Nell'esempio seguente viene costruita un'istanza XML costituita da:
Un valore (
ProductID
) ottenuto da una colonna non XML. La funzione sql:column() viene usata per associare questo valore nel codice XML.Un valore (
ListPrice
) ottenuto da una colonna non XML di un'altra tabella. La funzionesql:column()
viene utilizzata anche in questo caso per associare tale valore nell'istanza XML.Valore (
DiscountPrice
) da una variabile Transact-SQL. Il metodosql:variable()
viene utilizzato per associare tale valore nell'istanza XML.Valore (
ProductModelName
) da una colonna di tipo xml per rendere la query più interessante.
Query:
DECLARE @price money
SET @price=2500.00
SELECT ProductID, Production.ProductModel.ProductModelID,CatalogDescription.query('
declare namespace pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
<Product
ProductID="{ sql:column("Production.Product.ProductID") }"
ProductModelID= "{ sql:column("Production.Product.ProductModelID") }"
ProductModelName="{/pd:ProductDescription[1]/@ProductModelName }"
ListPrice="{ sql:column("Production.Product.ListPrice") }"
DiscountPrice="{ sql:variable("@price") }"
/>')
FROM Production.Product
JOIN Production.ProductModel
ON Production.Product.ProductModelID = Production.ProductModel.ProductModelID
WHERE ProductID=771
Dalla query precedente si noti quanto segue:
Gli elementi XQuery utilizzati nel metodo
query()
costruiscono l'istanza XML.La
namespace
parola chiave viene usata per definire un prefisso dello spazio dei nomi nel prologo XQuery. Tale prefisso viene creato perché il valore dell'attributoProductModelName
viene recuperato dalla colonna di tipo xmlCatalogDescription xml
, a cui è associato uno schema.
Risultato:
<Product ProductID="771" ProductModelID="19"
ProductModelName="Mountain 100"
ListPrice="3399.99" DiscountPrice="2500" />
Vedi anche
Funzioni di estensione XQuery di SQL Server
Confrontare dati XML tipizzati con dati XML non tipizzati
Dati XML (SQL Server)
Creare istanze di dati XML
metodi con tipo di dati xml
Linguaggio XML di manipolazione dei dati (XML DML)