Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
S'applique à :SQL Server
Retourne la valeur typée pour chaque élément spécifié par $arg.
Syntaxe
fn:data ($arg as item()*) as xdt:untypedAtomic*
Arguments
$arg
Séquence d’éléments dont les valeurs typées sont retournées.
Notes
Les considérations suivantes s’appliquent aux valeurs typées :
La valeur typée d'une valeur atomique est la valeur atomique.
La valeur typée d'un nœud de texte est la valeur chaîne du nœud de texte.
La valeur typée d'un commentaire est la valeur de chaîne du commentaire.
La valeur typée d'une instruction de traitement est le contenu de l'instruction de traitement sans le nom cible de l'instruction de traitement.
La valeur typée d'un nœud de document est sa valeur de chaîne.
Les considérations suivantes s’appliquent aux nœuds d’attribut et d’élément :
Si un nœud d'attribut est typé avec un type de schéma XML, sa valeur typée est la valeur typée correspondante.
Si le nœud d’attribut n’est pas typé, sa valeur typée est égale à sa valeur de chaîne retournée en tant qu’instance de
xdt:untypedAtomic.Si le nœud d’élément n’a pas été typé, sa valeur typée est égale à sa valeur de chaîne retournée en tant qu’instance de
xdt:untypedAtomic.
Les considérations suivantes s’appliquent aux nœuds d’élément typés :
Si l’élément a un type de contenu simple,
data()retourne la valeur typée de l’élément.Si le nœud est de type complexe, y compris xs :anyType,
data()retourne une erreur statique.
Bien que l’utilisation de la data() fonction soit fréquemment facultative, comme illustré dans les exemples suivants, la spécification de la fonction augmente explicitement la data() lisibilité des requêtes. Pour plus d’informations, consultez Concepts de base de XQuery.
Vous ne pouvez pas spécifier data() sur le code XML construit, comme illustré dans l’exemple suivant :
DECLARE @x AS XML;
SET @x = '';
SELECT @x.query('data(<SomeNode>value</SomeNode>)');
Exemples
Cet article fournit des exemples XQuery sur des instances XML stockées dans différentes colonnes de type XML dans la base de données AdventureWorks.
R : Utiliser la fonction XQuery data() pour extraire la valeur typée d’un nœud
La requête suivante montre comment la data() fonction est utilisée pour récupérer des valeurs d’un attribut, d’un élément et d’un nœud de texte :
WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS p1, 'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)
SELECT CatalogDescription.query(N'
for $pd in //p1:ProductDescription
return
<Root
ProductID = "{ data( ($pd//@ProductModelID)[1] ) }"
Feature = "{ data( ($pd/p1:Features/wm:Warranty/wm:Description)[1] ) }" >
</Root>
') AS Result
FROM Production.ProductModel
WHERE ProductModelID = 19;
Voici le résultat :
<Root ProductID="19" Feature="parts and labor"/>
Comme mentionné, la data() fonction est facultative lorsque vous construisez des attributs. Si vous ne spécifiez pas la data() fonction, elle est implicitement supposée. La requête suivante produit les mêmes résultats que la précédente :
WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS p1, 'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)
SELECT CatalogDescription.query('
for $pd in //p1:ProductDescription
return
<Root
ProductID = "{ ($pd/@ProductModelID)[1] }"
Feature = "{ ($pd/p1:Features/wm:Warranty/wm:Description)[1] }" >
</Root>
') AS Result
FROM Production.ProductModel
WHERE ProductModelID = 19;
Les exemples suivants illustrent les instances dans lesquelles la data() fonction est requise.
Dans la requête suivante, $pd/p1:Specifications/Material retourne l’élémentMaterial<>. Retourne également des data($pd/p1:Specifications/ Material) données de caractères typées comme xdt:untypedAtomic, car <Material> elles ne sont pas typées. Lorsque l’entrée n’est pas typée, le résultat data() est typé en tant que xdt:untypedAtomic.
SELECT CatalogDescription.query('
declare namespace p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
for $pd in //p1:ProductDescription
return
<Root>
{ $pd/p1:Specifications/Material }
{ data($pd/p1:Specifications/Material) }
</Root>
') AS Result
FROM Production.ProductModel
WHERE ProductModelID = 19;
Voici le résultat :
<Root>
<Material>Aluminum Alloy</Material>Aluminum Alloy
</Root>
Dans la requête suivante, data($pd/p1:Features/wm:Warranty) retourne une erreur statique, car <Warranty> il s’agit d’un élément de type complexe.
WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS p1, 'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)
SELECT CatalogDescription.query('
<Root>
{ /p1:ProductDescription/p1:Features/wm:Warranty }
{ data(/p1:ProductDescription/p1:Features/wm:Warranty) }
</Root>
') AS Result
FROM Production.ProductModel
WHERE ProductModelID = 23;