Partilhar via


Recuperar e consultar dados XML

Este tópico descreve as opções de consulta que você tem que especificar para consultar dados XML. Também descreve as partes de instâncias XML que não são preservadas quando são armazenadas em bancos de dados.

Neste tópico

  • Recursos de uma Instância XML que não são preservados

  • A configuração solicitou opções de consulta

Recursos de uma Instância XML que não são preservados

O SQL Server preserva o conteúdo da instância XML, mas não preserva aspectos da instância XML que não são considerados significativos no modelo de dados XML. Isso significa que uma instância XML recuperada pode não ser idêntica à instância que foi armazenada no servidor, mas conterá as mesmas informações.

Declaração XML

A declaração XML em uma instância não é preservada quando a instância é armazenada no banco de dados. Por exemplo:

CREATE TABLE T1 (Col1 int primary key, Col2 xml)
GO
INSERT INTO T1 values (1, '<?xml version="1.0" encoding="windows-1252" ?><doc></doc>')
GO
SELECT Col2
FROM T1

O resultado é <doc/>.

A declaração XML, como <?xml version='1.0'?>, não é preservada ao armazenar dados XML em uma instância de tipo de dados xml. Isso ocorre por design. A declaração XML (<? xml... ?>) e seus atributos (versão/codificação/autônoma) são perdidos depois que os dados são convertidos no tipo xml. A declaração XML é tratada como uma diretiva para o analisador XML. Os dados XML são armazenados internamente como ucs-2. Todos os outros PIs na instância XML são preservados.

[INÍCIO]

Ordem dos atributos

A ordem dos atributos em uma instância XML não é preservada. Quando você consulta a instância XML armazenada na coluna de tipo xml, a ordem dos atributos no XML resultante pode ser diferente da instância XML original.

[INÍCIO]

Aspas em torno de valores de atributos

Aspas simples e aspas duplas em torno de valores de atributos não são preservadas. Os valores de atributos são armazenados no banco de dados como um nome e par de valores. As aspas não são armazenadas. Quando uma XQuery é executada em uma instância XML, o XML resultante é serializado com aspas duplas em torno dos valores dos atributos.

DECLARE @x xml
-- Use double quotation marks.
SET @x = '<root a="1" />'
SELECT @x
GO
DECLARE @x xml
-- Use single quotation marks.
SET @x = '<root a=''1'' />'
SELECT @x
GO

As duas consultas retornam = <root a="1" />.

[INÍCIO]

Prefixos de namespace

Prefixos de namespace não são preservados. Quando você especifica XQuery em uma coluna de tipo xml, o resultado de XML serializado pode retornar prefixos de namespace diferentes.

DECLARE @x xml
SET @x = '<ns1:root xmlns:ns1="abc" xmlns:ns2="abc">
            <ns2:SomeElement/>
          </ns1:root>'
SELECT @x
SELECT @x.query('/*')
GO

O prefixo de namespace no resultado pode ser diferente. Por exemplo:

<p1:root xmlns:p1="abc"><p1:SomeElement/></p1:root>

[INÍCIO]

A configuração solicitou opções de consulta

Ao consultar variáveis ou colunas do tipo xml usando métodos de tipo de dados xml, as seguintes opções devem ser definidas conforme mostrado.

Opções SET

Valores necessários

ANSI_NULLS

ON

ANSI_PADDING

ON

ANSI_WARNINGS

ON

ARITHABORT

ON

CONCAT_NULL_YIELDS_NULL

ON

NUMERIC_ROUNDABORT

OFF

QUOTED_IDENTIFIER

ON

Se as opções não estiverem definidas conforme mostrado, haverá falha em consultas e modificações em métodos de tipo de dados xml.

[INÍCIO]

Consulte também

Conceitos

Criar instâncias de dados XML