Minha fonte está no servidor SQL; meu alvo está em Snowflake. A tabela de destino foi criada extraindo a coluna XML apenas da origem. Preciso comparar as primeiras 20 linhas na origem e no destino para ver se os dados correspondem. Eu preciso que as 20 linhas estejam na mesma ordem. Eu consultei a fonte no SQL Server com isso:
SELECT TOP 20
COLUMN_XML
FROM TABLE_NAME
ORDER BY COLUMN_XML;
Recebi esta mensagem de erro:
O tipo de dados XML não pode ser comparado ou classificado, exceto ao usar o operador IS NULL.
Gostaria de saber se alguém pode me dizer se posso consultar as 20 primeiras linhas na coluna XML na origem e no destino de forma que fiquem na mesma ordem?
geral
Esta parece ser uma escolha de design muito ruim. Seria mais sensato analisar o XML em tabelas normalizadas adequadas para comparar. XML é apenas um daqueles tipos de dados redheaded que tem muito mais restrições do que outros.
Você pode usar os exemplos abaixo para fazer o que quiser, mas provavelmente terá um desempenho absolutamente terrível.
Se eu fosse você, repensaria seriamente essa abordagem.
Altamente improvável porque o SQLServer está dizendo "Não".
XML é apenas um grande bloco de texto e tentar classificar por grandes blocos de texto provavelmente terá um desempenho [muito] ruim.
XML é um tipo de dados composto.
É composto de bits muito menores e provavelmente faz sentido classificar por um [ou mais] desses "bits", em vez da coisa toda. Como Erik diz, provavelmente é melhor normalizar [pelo menos parte] disso em estruturas relacionais mais sensatas.
O XML também pode ser um grande problema em sua definição e/ou implementação.
Os atributos são listas oficialmente desordenadas de pares chave-valor, portanto, enquanto XML consideraria esses dois como equivalentes, classificá-los como texto não o faria!