Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
Este artigo descreve as opções de consulta que tem de especificar para consultar dados XML. Descreve também as partes das instâncias XML que não são preservadas quando armazenadas em bases de dados.
Definir opções de consulta obrigatórias
Quando consulta colunas ou variáveis do tipo xml usando métodos de tipo de dados xml , as seguintes opções devem ser definidas conforme mostrado.
| Opções de SET | Valores Obrigatórios |
|---|---|
| ANSI_NULLS | ON |
| ANSI_PADDING | ON |
| ANSI_WARNINGS | ON |
| ARITHABORT | ON |
| CONCAT_NULL_YIELDS_NULL | ON |
| NUMERIC_ROUNDABORT | DESLIGADO |
| QUOTED_IDENTIFIER | ON |
Se as opções não estiverem definidas como mostrado, consultas e modificações nos métodos de tipo de dados XML falharão.
Características de uma instância XML que não são preservadas
O SQL Server preserva o conteúdo da instância XML, mas não preserva aspetos da instância XML que não são considerados significativos no modelo de dados XML. Isto significa que uma instância XML recuperada pode não ser idêntica à instância armazenada no servidor, mas conter a mesma informação.
Declaração XML
A declaração XML numa instância não é preservada quando a instância está armazenada na base 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 numa instância de tipo de dado xml . Isso é intencional. A declaração XML () e os seus atributos (versão/codificação/stand-alone) são perdidos após a conversão dos dados para o tipo xml. A declaração XML é tratada como uma diretiva para o parser XML. Os dados XML são armazenados internamente como ucs-2. Todos os outros PIs na instância XML são preservados.
Ordem dos atributos
A ordem dos atributos numa instância XML não é preservada. Quando consulta a instância XML armazenada na coluna do tipo xml , a ordem dos atributos no XML resultante pode ser diferente da instância XML original.
Aspas em torno dos valores dos atributos
As aspas simples e as aspas duplas em torno dos valores dos atributos não são preservadas. Os valores dos atributos são armazenados na base de dados como um par de nomes e valores. As marcas de aspas não são armazenadas. Quando um XQuery é executado contra 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
Ambas as consultas retornam = <root a="1" />.
Prefixos de espaço de nomes
Os prefixos do namespace não são preservados. Quando especifica XQuery contra uma coluna do tipo xml , o resultado XML serializado pode devolver diferentes prefixos de namespace.
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>