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

Traduções deste artigo Traduções deste artigo
ID do artigo: 914638 - Exibir os produtos aos quais esse artigo se aplica.
Bug #: 20011171 (SQLBUDT)
Expandir tudo | Recolher tudo

Neste artigo

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> XML
    GO
    
  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>
    GO
    
    CREATE 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:
http://www.w3.org/TR/xmlschema-1/#Complex_Type_Definitions

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>'
    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
    
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:
30
30

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):
http://msdn2.microsoft.com/en-us/library/ms187038.aspx

Propriedades

ID do artigo: 914638 - Última revisão: quinta-feira, 6 de abril de 2006 - Revisão: 2.3
A informação contida neste artigo aplica-se 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
Palavras-chave: 
kbmt kbsql2005presp1fix kbsql2005xml kbsql2005tsql kbexpertiseadvanced kbtshoot kbprb KB914638 KbMtpt
Tradução automática
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

Submeter comentários

 

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