Fonctions de XQuery Extension - SQL :variable()

 

S’applique à : SQL Server

THIS TOPIC APPLIES TO: yesSQL Server (starting with 2012)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

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

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

Comme décrit dans la rubrique de liaison de données relationnelles à l’intérieur de XML, vous pouvez utiliser cette fonction lorsque vous utilisez méthodes de type de données XML pour exposer une valeur relationnelle dans XQuery.

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

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

Vous pouvez uniquement faire référence à un xml instruction d’insertion de l’instance dans le contexte de l’expression source d’un XML-DML ; sinon vous ne peut pas faire référence à des valeurs qui sont de type xml ou un type common language runtime (CLR) défini par l’utilisateur.

A. 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. Le fonction SQL :Column() sert à lier cette valeur dans le document 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 ;

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

  • Une valeur (ProductModelName) d’une xml type colonne de 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="http://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 prologue 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" />  

Fonctions d’Extension XQuery SQL Server
Comparer le type XML au format XML non typé
Données XML (SQL Server)
Créer des Instances de données XML
les méthodes de Type de données XML
XML Data Modification Language (DML XML)

Ajouts de la communauté

AJOUTER
Afficher: