Recebe um valor NULL quando utilizar XQuery para obter o valor de um elemento XML no SQL Server 2005

Traduções de Artigos Traduções de Artigos
Artigo: 914638 - Ver produtos para os quais este artigo se aplica.
N.º de bugs: 20011171 (SQLBUDT)
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Recebe um valor NULL quando utilizar XQuery para obter o valor de um elemento XML quando se verificam as seguintes condições:
  • O elemento XML é declarado como um tipo complexo tem 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 .
  • Utilizar a função de dados para obter o valor do elemento XML.

Causa

Este problema ocorre porque o valor de um elemento XML é processado como um valor de inline para o elemento XML quando o elemento XML é declarado como um tipo complexo com conteúdo simples e misto conteúdo. Por conseguinte, a função de dados não é possível obter o valor digitado do elemento XML. Normalmente, o valor do elemento XML é processado como o valor introduzido do subordinado do elemento XML.

Resolução

Informações sobre Service Packs

Para resolver este problema, obtenha o service pack mais recente do Microsoft SQL Server 2005. Para obter mais informações, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
913089Como obter o service pack mais recente para o SQL Server 2005

Como contornar

Para contornar este problema, siga estes passos:
  1. Tem de alterar a coluna da tabela que tenha a respectiva entrada de dados validada contra o conjunto de esquema XML problemático. Esta coluna da tabela deve ser alterada da coluna XML introduzida para a coluna XML sem tipos. Para o fazer, utilize uma instrução Transact-SQL que é semelhante à seguinte:
    ALTER TABLE <TableName> ALTER COLUMN <ColumnName> XML
    GO
    
  2. Largue a colecção de esquema XML existente. Em seguida, crie uma nova colecção de esquema XML que tenha a mesma definição, o esquema XML antigo, excepto que o valor do atributo da declaração de elemento XML misto estiver definido como false . Para o fazer, utilize uma instrução Transact-SQL que é semelhante à seguinte:
    DROP XML SCHEMA COLLECTION <OldSchemaName>
    GO
    
    CREATE XML SCHEMA COLLECTION <NewSchemaName> AS N?<NewSchemaDefinition>?
    GO
    
  3. Defina a coluna tabela novamente para a coluna XML introduzida valida contra a nova colecção do esquema XML. Para o fazer, utilize uma instrução Transact-SQL que é semelhante à seguinte:
    ALTER TABLE <TableName> ALTER COLUMN <ColumnName> XML(<NewSchemaName>)
    GO
    
Nota <TableName> representa o nome da tabela. <ColumnName> representa o nome da coluna de tabela XML. <OldSchemaName> representa o nome da colecção de esquema problemático antigo. <NewSchemaName> representa o nome da nova colecção do esquema. <NewSchemaDefinition> representa o código que define a nova colecção do esquema.

Ponto Da Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na secção "Aplica-se a". Este problema foi corrigido pela primeira vez no Microsoft SQL Server 2005 Service Pack 1.

Mais Informação

Para um tipo complexo com conteúdo simples, não recomendamos a que defina o valor do atributo do tipo complexo misto como true . Especificação das estruturas de esquema XML que está disponível no Web site do World Wide Web Consortium (W3C) também aborda este problema. Para mais informações, consulte "3.4.3" a secção e "3.4.4" secção o seguinte Web site:
http://www.w3.org/TR/xmlschema-1/#Complex_Type_Definitions

Passos para reproduzir o problema

  1. Abra o SQL Server 2005 Management Studio.
  2. Ligar a uma instância do SQL Server.
  3. Expandir bases de dados e clique numa base de dados que pretende modificar.
  4. No menu ficheiro , aponte para Novo e, em seguida, clique em Base de dados do motor de consulta . Aparece a janela Editor de consultas .
  5. Cole o seguinte exemplo de código na janela do 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
Nota neste resultado, <empty> indica que não aparece nada.

No entanto, o resultado deve ser semelhante à seguinte:
30
30

Referências

Para obter mais informações sobre a função dados XQuery, visite o seguinte Web site da Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/ms187038.aspx

Propriedades

Artigo: 914638 - Última revisão: 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 2005 Server Workgroup
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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