Condividi tramite


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 funzione sql:column() viene utilizzata anche in questo caso per associare tale valore nell'istanza XML.
  • Un valore (DiscountPrice) ottenuto da una variabile Transact-SQL. Il metodo sql: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'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" />

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)

Altre risorse

Metodi con tipo di dati XML

Guida in linea e informazioni

Assistenza su SQL Server 2005