Funzione sql:variable() (XQuery)
Espone in un'istanza di dati XML una variabile che contiene un valore SQL relazionale.
Sintassi
sql:variable("variableName") as xdt:anyAtomicType?
Osservazioni
Come descritto nell'argomento relativo all'associazione di dati relazionali all'interno di codice XML, è possibile utilizzare questa funzione quando si utilizzano i metodi con tipo di dati XML per esporre un valore relazionale nelle informazioni XML.
Il metodo query() viene ad esempio utilizzato per specificare una query su un'istanza XML archiviata in una variabile o in una colonna con tipo di dati xml. A volte è necessario creare query in grado di utilizzare anche valori contenuti in un parametro o in una variabile Transact-SQL, per mettere insieme dati relazionali e XML. A tale scopo è possibile utilizzare la funzione sql:variable.
Il valore SQL verrà mappato a un valore XQuery corrispondente e sarà convertito in un tipo XQuery equivalente al tipo SQL.
In SQL Server 2005 non è possibile fare riferimento a valori di tipo xml o a un tipo CLR definito dall'utente.
Esempi
A. 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 utilizzata per associare tale valore nell'istanza 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. - Un valore (
DiscountPrice
) ottenuto da una variabile Transact-SQL. Il metodosql:variable()
viene utilizzato per associare tale valore nell'istanza XML. - Un valore (
ProductModelName
) ottenuto da una colonna di tipo xml, per rendere più interessante la query.
La query è riportata di seguito:
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 parola chiave
namespace
definisce un prefisso di 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" />
Vedere anche
Riferimento
Funzioni per le estensioni XQuery di SQL Server
Concetti
Codice XML tipizzato e non tipizzato
Tipo di dati XML
Generazione di istanze XML
Linguaggio XML di manipolazione dei dati (XML DML)