Vous recevez une valeur NULL lorsque vous utilisez XQuery pour récupérer la valeur d'un élément XML dans SQL Server 2005

Traductions disponibles Traductions disponibles
Numéro d'article: 914638 - Voir les produits auxquels s'applique cet article
Bogue #: 20011171 (SQLBUDT)
Agrandir tout | Réduire tout

Sommaire

Symptômes

Vous recevez une valeur NULL lorsque utilisez XQuery pour extraire la valeur d'un élément XML lorsque les conditions suivantes sont vraie :
  • L'élément XML est déclarée comme un type complexe qui possède le contenu simple dans la définition de schéma associé.
  • La valeur de l'attribut mixte de la déclaration d'élément XML dans la définition de schéma associé est true .
  • Vous utilisez la fonction de données pour récupérer la valeur de l'élément XML.

Cause

Ce problème se produit car la valeur d'un élément XML est traitée comme une valeur en ligne pour l'élément XML lorsque l'élément XML est déclarée comme un type complexe qui a contenu simple et mixte contenu. Par conséquent, la fonction de données ne peut pas récupérez la valeur tapée de l'élément XML. En règle générale, la valeur de l'élément XML est traitée comme valeur de l'enfant de l'élément XML tapée.

Résolution

Informations sur le service pack

Pour résoudre ce problème, procurez-vous le dernier service pack pour Microsoft SQL Server 2005. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
913089 Comment obtenir le dernier pack service pour SQL Server 2005

Contournement

Pour contourner ce problème, procédez comme suit :
  1. Vous devez modifier la colonne de table dont la saisie de données validé par rapport à la collection de schémas XML problématique. Cette colonne de tableau doit être modifiée dans la colonne XML sans type de la colonne XML tapée. Pour ce faire, utilisez une instruction Transact-SQL qui est semblable à celui-ci :
    ALTER TABLE <TableName> ALTER COLUMN <ColumnName> XML
    GO
    
  2. Supprimer la collection de schémas XML existante. Ensuite créer une nouvelle collection de schémas XML qui possède la même définition en tant que l'ancien schéma XML, à ceci près que la valeur de l'attribut mixte de la déclaration d'élément XML est définie sur false . Pour ce faire, utilisez une instruction Transact-SQL qui est semblable à celui-ci :
    DROP XML SCHEMA COLLECTION <OldSchemaName>
    GO
    
    CREATE XML SCHEMA COLLECTION <NewSchemaName> AS N?<NewSchemaDefinition>?
    GO
    
  3. La colonne du tableau en colonne attribuée à la tapé XML qui valide par rapport à la nouvelle collection de schémas XML. Pour ce faire, utilisez une instruction Transact-SQL qui est semblable à celui-ci :
    ALTER TABLE <TableName> ALTER COLUMN <ColumnName> XML(<NewSchemaName>)
    GO
    
note <TableName>représente le nom de la table. <ColumnName>représente le nom de la colonne du tableau XML. <OldSchemaName>représente le nom de la collection schéma problématiques ancien. <NewSchemaName>représente le nom de la nouvelle collection de schémas. <NewSchemaDefinition>représente le code qui définit la nouvelle collection de schémas.

Statut

Microsoft a confirmé que c'est un problème dans les produits Microsoft répertoriés dans la section « S'applique à ». Ce problème a été corrigé dans Microsoft SQL Server 2005 Service Pack 1.

Plus d'informations

Pour un type complexe qui offre un contenu simple, nous vous déconseillons que vous définir la valeur de l'attribut mixte le type complexe à cette propriété a la valeur true . La spécification sur les structures de schéma XML qui est disponible sur le site Web World Wide Web Consortium (W3C) décrit également ce problème. Pour plus d'informations, voir la 3.4.3 la section et le 3.4.4 section de l'adresse suivante :
http://www.w3.org/TR/xmlschema-1/#Complex_Type_Definitions

Procédure pour reproduire le problème

  1. Ouvrez SQL Server 2005 Management Studio.
  2. Se connecter à une instance de SQL Server.
  3. Développez bases de données , puis cliquez sur une base de données que vous voulez modifier.
  4. Dans le menu Fichier , pointez sur Nouveau , puis cliquez sur moteur de requête . La fenêtre Éditeur de requête s'affiche.
  5. Collez l'exemple de code suivant dans la fenêtre Éditeur de requête :
    create xml schema collection myschema as N'
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    	<xs:element name="ElementName" type="xs:integer" />
    		
    	<xs:complexType name="newct" mixed="true">
    		<xs:simpleContent>
    			<xs:extension base="xs:integer">
    				<xs:attribute name="bar" type="xs:integer" />
    			</xs:extension>
    		</xs:simpleContent>
    	</xs:complexType>
    </xs:schema>'
    go
    
    create table xml_test (pk int primary key identity(1,1), xmlcol xml(myschema))
    go
    
    insert xml_test values ('
    <ElementName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="newct" bar="10">30</ElementName>')
    go
    
    insert xml_test values ('
    <ElementName>30</ElementName>')
    go
    
    select xmlcol.query('data(/ElementName)')
    from xml_test
    
La sortie est semblable au suivant :
<empty>
30
Remarque dans cette sortie <empty> indique que rien ne s'affiche.

Toutefois, le résultat attendu est semblable au suivant :
30
30

Références

Pour plus d'informations sur la fonction de données pour XQuery, reportez-vous au site de Web MSDN (Microsoft Developer Network) suivant :
http://msdn2.microsoft.com/en-us/library/ms187038.aspx

Propriétés

Numéro d'article: 914638 - Dernière mise à jour: jeudi 6 avril 2006 - Version: 2.3
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
Mots-clés : 
kbmt kbsql2005presp1fix kbsql2005xml kbsql2005tsql kbexpertiseadvanced kbtshoot kbprb KB914638 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 914638
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com