Condividi tramite


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 funzione sql:column() viene utilizzata anche in questo caso per associare tale valore nell'istanza XML.

  • Valore (DiscountPrice) da una variabile Transact-SQL. Il metodo sql: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'attributo ProductModelName viene recuperato dalla colonna di tipo xml CatalogDescription 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)