Fonctions de XQuery Extension - SQL :variable()XQuery Extension Functions - sql:variable()

CETTE RUBRIQUE S’APPLIQUE À : ouiSQL Server (à partir de la version 2012)nonAzure SQL DatabasenonAzure SQL Data WarehousenonParallel Data Warehouse 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.Exposes a variable that contains a SQL relational value inside an XQuery expression.

SyntaxeSyntax


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

NotesRemarks

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 du type de données XML pour exposer une valeur relationnelle dans XQuery.As described in the topic Binding Relational Data Inside XML, you can use this function when you use XML data type methods to expose a relational value inside XQuery.

Par exemple, le méthode query() est utilisée pour spécifier une requête sur une instance XML qui est stockée dans un xml variable ou une colonne de type de données.For example, the query() method is used to specify a query against an XML instance that is stored in an xml data type variable or column. En outre, vous pouvez parfois souhaiter que la requête utilise des valeurs d'une variable ou d'un paramètre Transact-SQLTransact-SQL afin de rassembler des données relationnelles et XML.Sometimes, you might also want your query to use values from a Transact-SQLTransact-SQL variable, or parameter, to bring relational and XML data together. Pour ce faire, vous utilisez la SQL : variable (fonction).To do this, you use the sql:variable function.

La valeur SQL sera mappée à une valeur XQuery correspondante et son type vont être un type de base XQuery équivalent au type SQL correspondant.The SQL value will be mapped to a corresponding XQuery value and its type will be an XQuery base type that is equivalent to the corresponding SQL type.

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éfinis par l’utilisateur.You can only refer to an xml instance in the context of the source expression of an XML-DML insert statement; otherwise you cannot refer to values that are of type xml or a common language runtime (CLR) user-defined type.

ExemplesExamples

A.A. Utilisation de la fonction sql:variable() pour insérer une valeur variable Transact-SQL dans XMLUsing the sql:variable() function to bring a Transact-SQL variable value into XML

L'exemple suivant construit une instance XML composée des éléments suivants :The following example constructs an XML instance that made up of the following:

  • une valeur (ProductID) issue d'une colonne non-XML.A value (ProductID) from a non-XML column. Le fonction SQL :Column() est utilisée pour lier cette valeur dans le document XML.The sql:column() function is used to bind this value in the XML.

  • une valeur (ListPrice) issue d'une colonne non-XML d'une autre table.A value (ListPrice) from a non-XML column from another table. Là encore, sql:column() permet de lier cette valeur au document XML ;Again, sql:column() is used to bind this value in the XML.

  • une valeur (DiscountPrice) issue d'une variable Transact-SQLTransact-SQL.A value (DiscountPrice) from a Transact-SQLTransact-SQL variable. La méthode sql:variable() permet de lier cette valeur au document XML ;The sql:variable() method is used to bind this value into the XML.

  • Une valeur (ProductModelName) à partir d’un xml colonne de type pour rendre la requête plus intéressante.A value (ProductModelName) from an xml type column, to make the query more interesting.

    Voici la requête :This is the query:

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 :Note the following from the previous query:

  • La requête XQuery dans la méthode query() construit le document XML.The XQuery inside the query() method constructs the XML.

  • Le namespace est utilisé pour définir un préfixe d’espace de noms dans le prologue XQuery.The namespace keyword is used to define a namespace prefix in the XQuery Prolog. 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é.This is done because the ProductModelName attribute value is retrieved from the CatalogDescription xml type column, which has a schema associated with it.

    Voici le résultat obtenu :This is the result:

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

Voir aussiSee Also

Fonctions d’Extension XQuery SQL Server SQL Server XQuery Extension Functions
Comparer du XML typé et du XML non typé Compare Typed XML to Untyped XML
Données XML (SQL Server) XML Data (SQL Server)
Créer des instances de données XML Create Instances of XML Data
Méthodes des types de données xml xml Data Type Methods
XML Data Modification Language ( XML DML )XML Data Modification Language (XML DML)