Liaison de données relationnelles dans des données XML
S’applique à : SQL ServerAzure SQL Database Azure SQL Managed Instance
Vous pouvez spécifier des méthodes de type de données xml sur une variable ou une colonne de type de données xml. Par exemple, la méthode query( ) (type de données xml) exécute la requête Xml spécifiée sur une instance XML. Lorsque vous construisez des données XML de cette manière, vous pouvez inclure une valeur à partir d'une colonne de type non-XML ou une variable Transact-SQL. Ce processus est appelé liaison de données relationnelles dans des données XML.
Pour lier les données relationnelles non-XML dans des données XML, le moteur de base de données SQL Server fournit les pseudo-fonctions suivantes :
Fonction sql:column() (requête Xml) Vous permet d’utiliser les valeurs d’une colonne relationnelle dans votre requête Xml ou expression DML XML.
Fonction sql:variable() (XQuery). Vous permet d'utiliser la valeur d'une variable SQL dans votre expression XQuery ou DML XML.
Vous pouvez utiliser ces fonctions avec les méthodes de type de données xml chaque fois que vous souhaitez exposer une valeur relationnelle dans du code XML.
Vous ne pouvez pas utiliser ces fonctions pour référencer des données dans des colonnes ou variables de type xml, CLR défini par l’utilisateur, datetime, smalldatetime, text, ntext, sql_variant et image.
En outre, cette liaison est destinée à un emploi en lecture seule. Cela signifie que vous ne pouvez pas écrire de données dans les colonnes qui utilisent ces fonctions. Par exemple, l’instruction sql:variable("@x")="expression quelconque" n’est pas autorisée.
Exemple : requête inter-domaines utilisant sql:variable()
Cet exemple montre comment sql:variable() peut permettre à une application de paramétrer une requête. Le numéro ISBN est passé en utilisant une variable SQL @isbn. En remplaçant la constante par sql:variable() , vous pouvez utiliser la requête pour rechercher n’importe quel numéro ISBN et pas seulement le numéro 0-7356-1588-2.
DECLARE @isbn VARCHAR(20)
SET @isbn = '0-7356-1588-2'
SELECT xCol
FROM T
WHERE xCol.exist ('/book/@ISBN[. = sql:variable("@isbn")]') = 1
sql:column() peut être utilisée de manière similaire et apporter d’autres avantages. Pour gagner en efficacité, vous pouvez placer des index sur la colonne, en suivant les suggestions de l'optimiseur de requête basé sur les coûts. De plus, la colonne calculée peut stocker une propriété promue.