Liaison de données relationnelles dans des données XML

Vous pouvez spécifier Méthodes des types 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 l'expression XQuery 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 :

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 des 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 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.