Pergunta

Ao criar uma tabela que possui uma coluna do tipo XML, estou me referindo a um complexo Coleção de esquema XML.Quando eu especifico o Esquema XML, tenho a opção de mencionar CONTENTE ou DOCUMENTO palavra-chave.Este último garantirá que os dados XML sejam armazenados como um documento em uma única coluna.

De acordo com um vídeo tutorial o CONTENTE irá armazenar os dados XML em fragmentos.

Além da afirmação acima, não encontro referência em nenhum outro lugar sobre o uso do CONTENTE palavra-chave e sua implicação no esquema e nos dados.

Gostaria de saber como os fragmentos são criados e gerenciados e se e como podem ser consultados individualmente.Além disso, como os fragmentos estão correlacionados.A seguir, quando eu alterar a coleção de esquemas XML, qual será o impacto.

Nenhuma solução correta

Outras dicas

na verdade eu acho SQL Server 2005 XML está muito bem documentado.
CONTENT é o padrão e permite qualquer XML válido.DOCUMENT é mais específico e significa que os dados XML que você pode armazenar só podem ter um único nó de nível superior.

Criar:

CREATE TABLE XmlCatalog ( 
   ID INT PRIMARY KEY, 
   Document XML(CONTENT myCollection))

Inserir:

INSERT INTO XmlCatalog VALUES (2, 
'<doc id="123">
    <sections>
   <section num="1"><title>XML Schema</title></section>
   <section num="3"><title>Benefits</title></section>
   <section num="4"><title>Features</title></section>
    </sections>
</doc>')

Selecione:

SELECT xCol.query('/doc[@id = 123]//section')   
FROM XmlCatalog   
WHERE  xCol.exist ('/doc[@id = 123]') = 1

...e assim por diante.A linguagem de consulta excede mais ou menos um subconjunto do XPath 1.0.

Se você alterar um XSD ele será verificado em Inserções e Atualizações e armazenado no xml de cada elemento.Pelo que entendi o documento, também é permitido adicionar vários esquemas para uma coluna para que as entradas possam fazer referência a esquemas diferentes.

EDITAR:
Ok, depois de ler as partes específicas da documentação, acho que entendi qual é o seu problema.A referência não é muito clara nesse ponto, mas pelo que entendi, apenas entradas com um nó de nível superior podem ser vinculadas a esquemas XSD.
Devido ao fato dos esquemas XSD exigirem um único nó de nível superior definindo o arquivo XSD usado, não será possível validar fragmentos contendo mais de um elemento de nível superior.Não tentei, mas acho que não pode ser feito.
No entanto, parece ser válido definir uma coluna CONTENT, alterar um XSD e armazenar ambos, XML com um nó de nível superior referenciando o XSD, bem como fragmentos XML que serão verificados apenas quanto à boa formação.Os fragmentos podem ser acessados ​​usando a linguagem de consulta XPath mostrada na instrução select acima.
Não posso falar muito sobre as implicações de desempenho.A referência menciona que os XSDs são armazenados inline, portanto, será necessário algum espaço extra no banco de dados.As consultas XPath também precisam ser executadas.Apesar do XPath geralmente ser bastante rápido, acho que pode diminuir o desempenho, pois precisa ser executado em cada linha para obter o resultado.Para ter certeza, acho que você deve verificar o plano de execução de sua consulta específica, dependendo do tamanho e da complexidade do xml armazenado, bem como da expressão xpath.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top