Você recebe um valor NULL ao usar o XQuery para recuperar o valor de um elemento XML no SQL Server 2005

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 914638
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Bug #: 20011171 (SQLBUDT)
Sintomas
Você recebe um valor NULL quando usar o XQuery para recuperar o valor de um elemento XML quando as seguintes condições forem verdadeiras:
  • O elemento XML é declarado como um tipo complexo com conteúdo simples na definição de esquema associado.
  • O valor do atributo misto da declaração de elemento XML na definição de esquema associado é true .
  • Use a função de dados para recuperar o valor do elemento XML.
Causa
Esse problema ocorre porque o valor de um elemento XML é processado como um valor embutido para o elemento XML quando o elemento XML é declarado como um tipo complexo com conteúdo simples e misto conteúdo. Portanto, a função de dados não é possível recuperar o valor digitado do elemento XML. Normalmente, o valor do elemento XML é processado como o valor digitado do filho do elemento XML.
Resolução

Informações sobre o service pack

Para resolver esse problema, obtenha o service pack mais recente para o Microsoft SQL Server 2005. Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
913089Como obter o service pack mais recente para o SQL Server 2005
Como Contornar
Para contornar esse problema, execute estas etapas:
  1. Você deve alterar a coluna de tabela que tem sua entrada de dados validada em relação a coleção de esquema XML problemática. Esta coluna da tabela deve ser alterada da coluna XML digitada para a coluna XML não digitada. Para fazer isso, use uma instrução Transact-SQL semelhante à seguinte:
    ALTER TABLE <TableName> ALTER COLUMN <ColumnName> XMLGO
  2. Solte a coleção de esquema XML existente. Em seguida, crie uma coleção de esquema XML nova que tem a mesma definição como o esquema XML antigo, exceto que o valor do atributo misto da declaração de elemento XML é definido como false . Para fazer isso, use uma instrução Transact-SQL semelhante à seguinte:
    DROP XML SCHEMA COLLECTION <OldSchemaName>GOCREATE XML SCHEMA COLLECTION <NewSchemaName> AS N’<NewSchemaDefinition>’GO
  3. Defina a coluna da tabela de volta para a coluna XML digitada valida em relação a nova coleção de esquema XML. Para fazer isso, use uma instrução Transact-SQL semelhante à seguinte:
    ALTER TABLE <TableName> ALTER COLUMN <ColumnName> XML(<NewSchemaName>)GO
Observação <TableName> representa o nome da tabela. <ColumnName> representa o nome da coluna de tabela XML. <OldSchemaName> representa o nome da coleção de esquema problemático antigo. <NewSchemaName> representa o nome da nova coleção de esquema. <NewSchemaDefinition> representa o código que define a nova coleção de esquema.
Situação
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a". Esse problema foi corrigido primeiro no Microsoft SQL Server 2005 Service Pack 1.
Mais Informações
Para um tipo complexo com conteúdo simples, não é recomendável que você definir o valor do atributo do tipo complexo misto como true . A especificação nas estruturas de esquema XML que está disponível no site da World Wide Web Consortium (W3C) também discute esse problema. Para obter mais informações, consulte "3.4.3" seção e "3.4.4" seção o seguinte site:

Etapas para reproduzir o problema

  1. Abra o SQL Server 2005 Management Studio.
  2. Conecte-se a uma instância do SQL Server.
  3. Expanda Databases e clique em um banco de dados que você deseja modificar.
  4. No menu arquivo , aponte para novo e, em seguida, clique em Consulta do mecanismo de banco de dados . A janela Query Editor aparece.
  5. Cole o exemplo de código a seguir na janela de 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>'gocreate table xml_test (pk int primary key identity(1,1), xmlcol xml(myschema))goinsert xml_test values ('<ElementName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="newct" bar="10">30</ElementName>')goinsert xml_test values ('<ElementName>30</ElementName>')goselect xmlcol.query('data(/ElementName)')from xml_test
A saída é semelhante à seguinte:
<empty>30
Observação essa saída, <empty> indica que nada é exibido.

No entanto, a saída deve ser semelhante à seguinte:
3030
Referências
Para obter mais informações sobre a função de dados para o XQuery, visite o seguinte site da Web Microsoft Developer Network (MSDN):

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 914638 - Última Revisão: 12/09/2015 04:40:50 - Revisão: 2.3

Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Workgroup Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition

  • kbnosurvey kbarchive kbmt kbsql2005presp1fix kbsql2005xml kbsql2005tsql kbexpertiseadvanced kbtshoot kbprb KB914638 KbMtpt
Comentários