Options de requête XML et données conservées
S’applique à :SQL Server
Azure SQL Database
Azure SQL Managed Instance
Cet article décrit les options de requête que vous devez spécifier pour interroger des données XML. Il décrit également les parties d’instances XML qui ne sont pas conservées lorsqu’elles sont stockées dans des bases de données.
Définir les options de requête requises
Lorsque vous interrogez des colonnes ou des variables de type XML à l’aide de méthodes de type de données xml , les options suivantes doivent être définies comme indiqué.
Options SET | Valeurs requises |
---|---|
ANSI_NULLS | ACTIVÉ |
ANSI_PADDING | ACTIVÉ |
ANSI_WARNINGS | ACTIVÉ |
ARITHABORT | ACTIVÉ |
CONCAT_NULL_YIELDS_NULL | ACTIVÉ |
NUMERIC_ROUNDABORT | OFF |
QUOTED_IDENTIFIER | ACTIVÉ |
Si les options ne sont pas définies comme indiqué, les requêtes et les modifications sur les méthodes de type de données xml échouent.
Fonctionnalités d’une instance XML qui ne sont pas conservées
SQL Server conserve le contenu de l’instance XML, mais ne conserve pas les aspects de l’instance XML qui ne sont pas considérés comme significatifs dans le modèle de données XML. Cela signifie qu'une instance XML extraite peut ne pas être identique à l'instance stockée sur le serveur, mais contiendra les mêmes informations.
Déclaration XML
La déclaration XML dans une instance n’est pas conservée lorsque l’instance est stockée dans la base de données. Par exemple :
CREATE TABLE T1 (Col1 int primary key, Col2 xml);
GO
INSERT INTO T1 values (1, '<?xml version="1.0" encoding="windows-1252" ?><doc></doc>');
GO
SELECT Col2
FROM T1;
Le résultat est <doc/>
.
La déclaration XML, par exemple <?xml version='1.0'?>
, n’est pas conservée lors du stockage de données XML dans une instance de type de données XML . C'est la procédure normale. La déclaration XML () et ses attributs (version/encoding/stand-alone) sont perdus une fois les données converties au type xml. La déclaration XML est traitée comme une directive de l'analyseur XML. Les données XML sont stockées en interne au format ucs-2. Toutes les autres instructions de traitement dans l'instance XML sont conservées.
Ordre des attributs
L’ordre des attributs dans une instance XML n’est pas conservé. Quand vous interrogez l’instance XML stockée dans la colonne de type xml , l’ordre des attributs du code XML résultant peut différer de l’ordre utilisé dans l’instance XML d’origine.
Guillemets autour des valeurs d’attribut
Les guillemets simples et les guillemets doubles autour des valeurs d’attribut ne sont pas conservés. Les valeurs des attributs sont stockées sous forme de paire nom et valeur. Les guillemets ne sont pas stockés. En cas d'exécution d'une requête XQuery sur une instance XML, le code XML résultant est sérialisé, et les valeurs des attributs figurent entre guillemets.
DECLARE @x xml;
-- Use double quotation marks.
SET @x = '<root a="1" />';
SELECT @x;
GO
DECLARE @x xml;
-- Use single quotation marks.
SET @x = '<root a=''1'' />';
SELECT @x;
GO
Les deux requêtes retournent = <root a="1" />
.
Préfixes d’espace de noms
Les préfixes d’espace de noms ne sont pas conservés. Quand vous définissez une requête XQuery sur une colonne de type xml , le code XML sérialisé qui en découle peut retourner des préfixes d’espace de noms différents.
DECLARE @x xml;
SET @x = '<ns1:root xmlns:ns1="abc" xmlns:ns2="abc">
<ns2:SomeElement/>
</ns1:root>';
SELECT @x;
SELECT @x.query('/*');
GO
Le préfixe d'espace de noms peut avoir une valeur différente dans le résultat. Par exemple :
<p1:root xmlns:p1="abc"><p1:SomeElement/></p1:root>
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour