Você está offline; aguardando reconexão

Recebe um valor NULL quando utilizar XQuery para obter 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 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
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
N.º de bugs: 20011171 (SQLBUDT)
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> XMLGO
  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>GOCREATE 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:

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>'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
Nota neste resultado, <empty> indica que não aparece nada.

No entanto, o resultado deve ser semelhante à seguinte:
3030
Referências
Para obter mais informações sobre a função dados XQuery, visite o seguinte Web site da 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 2005 Server Workgroup, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL 2005 Server Enterprise

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