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éthodesql: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'attributProductModelName
est extraite de la colonne de typeCatalogDescription 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)