Recibe un valor NULL cuando utiliza XQuery para recuperar el valor de un elemento XML en SQL Server 2005

Seleccione idioma Seleccione idioma
Id. de artículo: 914638 - Ver los productos a los que se aplica este artículo
Nº de error: 20011171 (SQLBUDT)
Expandir todo | Contraer todo

En esta página

Síntomas

Recibirá un valor NULL cuando utiliza XQuery para recuperar el valor de un elemento XML cuando se cumplen las condiciones siguientes:
  • El elemento XML se declara como un tipo complejo que tiene contenido simple en la definición de esquema asociado.
  • El valor del atributo mixto de la declaración de elemento XML en la definición de esquema asociado es true .
  • Utilice la función de datos para recuperar el valor del elemento XML.

Causa

Este problema se produce porque el valor de un elemento XML se procesa como un valor en línea para el elemento XML cuando el elemento XML se declara como un tipo complejo que tiene contenido simple y mixto contenido. Por lo tanto, la función de datos no puede recuperar el valor con tipo del elemento XML. Normalmente, el valor del elemento XML se procesa como el valor del elemento secundario del elemento XML con tipo.

Solución

Información de Service Pack

Para resolver este problema, obtenga el service pack más reciente para Microsoft SQL Server 2005. Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
913089Cómo obtener el service pack más reciente para SQL Server 2005

Solución

Para evitar este problema, siga estos pasos:
  1. Debe cambiar la columna de tabla que tiene su entrada de datos valida con la colección de esquemas XML problemática. Esta columna de tabla debe cambiarse de la columna XML con tipo a la columna XML sin tipo. Para ello, utilice una instrucción de Transact-SQL que es similar al siguiente:
    ALTER TABLE <TableName> ALTER COLUMN <ColumnName> XML
    GO
    
  2. Quitar la colección de esquema XML existente. A continuación, cree una nueva colección de esquemas XML que tiene la misma definición como el esquema XML anterior, excepto en que el valor de atributo mixto de la declaración de elemento XML se establece en false . Para ello, utilice una instrucción de Transact-SQL que es similar al siguiente:
    DROP XML SCHEMA COLLECTION <OldSchemaName>
    GO
    
    CREATE XML SCHEMA COLLECTION <NewSchemaName> AS N?<NewSchemaDefinition>?
    GO
    
  3. La columna de la tabla vuelva a establecer la columna XML con tipo que se valida con respecto a la nueva colección de esquemas XML en. Para ello, utilice una instrucción de Transact-SQL que es similar al siguiente:
    ALTER TABLE <TableName> ALTER COLUMN <ColumnName> XML(<NewSchemaName>)
    GO
    
Nota <TableName> representa el nombre de la tabla. <ColumnName> representa el nombre de la columna de tabla XML. <OldSchemaName> representa el nombre de la antigua colección de esquemas problemático. <NewSchemaName> representa el nombre de la nueva colección de esquemas. <NewSchemaDefinition> representa el código que define la nueva colección de esquemas.

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:". Este problema se corrigió por primera vez en Microsoft SQL Server 2005 Service Pack 1.

Más información

Para un tipo complejo que tiene contenido simple, no se recomienda que establezca el valor del atributo del tipo complejo mixto en true . La especificación de las estructuras de esquema XML que está disponible en el sitio Web de World Wide Web Consortium (W3C) también trata este problema. Para obtener más información, vea "3.4.3" la sección y "3.4.4" sección en el siguiente sitio Web:
http://www.w3.org/TR/xmlschema-1/#Complex_Type_Definitions

Pasos para reproducir el problema

  1. Abra SQL Server 2005 Management Studio.
  2. Conectarse a una instancia de SQL Server.
  3. Expanda bases de datos y haga clic en una base de datos desea modificar.
  4. En el menú archivo , elija nuevo y, a continuación, haga clic en Consulta de motor de base de datos . Aparecerá la ventana de Editor de consultas .
  5. Pegue el siguiente ejemplo de código en la ventana del Editor de consultas :
    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
    
El resultado es similar al siguiente:
<empty>
30
Nota en esta salida, <empty> indica que no aparece nada.

Sin embargo, se espera que el resultado sea similar al siguiente:
30
30

Referencias

Para obtener más información sobre la función de datos de XQuery, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/ms187038.aspx

Propiedades

Id. de artículo: 914638 - Última revisión: jueves, 06 de abril de 2006 - Versión: 2.3
La información de este artículo se refiere a:
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
Palabras clave: 
kbmt kbsql2005presp1fix kbsql2005xml kbsql2005tsql kbexpertiseadvanced kbtshoot kbprb KB914638 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 914638

Enviar comentarios

 

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