Partage via


Fonctions d’extension XQuery : sql:variable()

S’applique à :SQL Server

Expose une variable qui contient une valeur relationnelle SQL dans une expression XQuery.

Syntaxe

  
sql:variable("variableName") as xdt:anyAtomicType?  

Notes

Comme décrit dans la rubrique Liaison de données relationnelles dans XML, vous pouvez utiliser cette fonction lorsque vous utilisez des méthodes de type de données XML pour exposer une valeur relationnelle dans XQuery.

Par exemple, la méthode query() est utilisée pour spécifier une requête sur une instance XML stockée dans une variable ou une colonne de type de données xml . Parfois, vous pouvez également souhaiter que votre requête utilise des valeurs d’une variable Transact-SQL, ou d’un paramètre, pour rassembler des données relationnelles et XML. Pour ce faire, vous utilisez la fonction sql:variable .

La valeur SQL est mappée à une valeur XQuery correspondante et son type est un type de base XQuery équivalent au type SQL correspondant.

Vous pouvez uniquement faire référence à une instance xml dans le contexte de l’expression source d’une instruction insert XML-DML ; sinon, vous ne pouvez pas faire référence à des valeurs de type xml ou à un type CLR (Common Language Runtime) défini par l’utilisateur.

Exemples

R. Utilisation de la fonction sql:variable() pour insérer une valeur variable Transact-SQL dans XML

L'exemple suivant construit une instance XML composée des éléments suivants :

  • une valeur (ProductID) issue d'une colonne non-XML. La fonction sql:column() est utilisée pour lier cette valeur dans le code XML.

  • une valeur (ListPrice) issue d'une colonne non-XML d'une autre table. Là encore, sql:column() permet de lier cette valeur au document XML ;

  • Valeur (DiscountPrice) d’une variable Transact-SQL. La méthode sql:variable() permet de lier cette valeur au document XML ;

  • Valeur (ProductModelName) d’une colonne de type xml , pour rendre la requête plus intéressante.

Voici la requête :

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  

Notez les points suivants dans la requête précédente :

  • La requête XQuery dans la méthode query() construit le document XML.

  • Le namespace mot clé est utilisé pour définir un préfixe d’espace de noms dans le prolog XQuery. Cette opération est réalisée car la valeur d'attribut ProductModelName est extraite de la colonne de type CatalogDescription xml, à laquelle un schéma est associé.

Voici le résultat obtenu :

<Product ProductID="771" ProductModelID="19"   
         ProductModelName="Mountain 100"   
         ListPrice="3399.99" DiscountPrice="2500" />  

Voir aussi

Fonctions d'extension SQL Server XQuery
Comparer du XML typé et du XML non typé
Données XML (SQL Server)
Créer des instances de données XML
Méthodes de type de données xml
Langage de modification de données XML (XML DML)