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
Você pode criar variáveis, parâmetros e colunas do tipo xml. Opcionalmente, você pode associar uma coleção de esquemas XML a uma variável, parâmetro ou coluna de tipo de xml. Neste caso, a instância do tipo de dados xml é chamada com tipo. Caso contrário, a instância XML chama-se sem tipo.
XML bem formado e o tipo de dados XML
O tipo de dados xml implementa o padrão ISO do tipo de dados xml . Portanto, ele pode armazenar documentos XML versão 1.0 bem formados e também os chamados fragmentos de conteúdo XML com nós de texto e um número arbitrário de elementos de nível superior em uma coluna XML sem tipo. O sistema verifica se os dados estão bem formados, não exige que a coluna seja vinculada a esquemas XML e rejeita dados que não estão bem formados no sentido estendido. Isso também é verdade para variáveis e parâmetros XML não tipados.
Esquemas XML
Um esquema XML fornece o seguinte:
Restrições de validação. Sempre que uma instância xml digitada é atribuída ou modificada, o SQL Server valida a instância.
Informações sobre o tipo de dados. Os esquemas fornecem informações sobre os tipos de atributos e elementos na instância do tipo de dados xml. As informações de tipo fornecem semântica operacional mais precisa para os valores contidos na instância do que é possível com o XML não tipado . Por exemplo, operações aritméticas decimais podem ser executadas em um valor decimal, mas não em um valor de cadeia de caracteres. Por isso, o armazenamento XML tipado pode ser significativamente mais compacto do que o XML não tipado.
Escolher XML tipado ou não tipado
Use o tipo de dados xml não tipificado nas seguintes situações:
Você não tem um esquema para seus dados XML.
Você tem esquemas, mas não quer que o servidor valide os dados. Às vezes, esse é o caso quando um aplicativo executa a validação do lado do cliente antes de armazenar os dados no servidor, armazena temporariamente dados XML que são inválidos de acordo com o esquema ou usa componentes de esquema que não são suportados no servidor.
Utilize o tipo de dados xml digitado nas seguintes situações:
Você tem esquemas para seus dados XML e deseja que o servidor valide seus dados XML de acordo com os esquemas XML.
Você deseja aproveitar as otimizações de armazenamento e consulta com base em informações de tipo.
Você deseja aproveitar melhor as informações de tipo durante a compilação de suas consultas.
Colunas, parâmetros e variáveis XML digitados podem armazenar documentos ou conteúdo XML. No entanto, você precisa especificar com um sinalizador se está armazenando um documento ou conteúdo no momento da declaração. Além disso, você precisa fornecer a coleção de esquemas XML. Especifique DOCUMENT se cada instância XML tiver exatamente um elemento de nível superior. Caso contrário, use CONTEÚDO. O compilador de consultas utiliza a bandeira DOCUMENT em verificações de tipo durante a compilação para inferir elementos únicos de nível superior.
Criando XML digitado
Antes de poder criar variáveis, parâmetros ou colunas digitados de xml, deve primeiro registrar a coleção de esquemas XML usando CREATE XML SCHEMA COLLECTION (Transact-SQL). Em seguida, você pode associar a coleção de esquema XML a variáveis, parâmetros ou colunas do xml tipo de dados.
Nos exemplos a seguir, uma convenção de nomenclatura de duas partes é usada para especificar o nome da coleção de esquema XML. A primeira parte é o nome do esquema e a segunda parte é o nome da coleção do esquema XML.
Exemplo: Associando uma coleção de esquema a uma variável de tipo XML
O exemplo a seguir cria uma variável xml type e associa uma coleção de esquema a ela. A coleção de esquema especificada no exemplo já foi importada no banco de dados AdventureWorks.
DECLARE @x xml (Production.ProductDescriptionSchemaCollection);
Exemplo: Especificando um esquema para uma coluna de tipo xml
O exemplo a seguir cria uma tabela com uma coluna xml type e especifica um esquema para a coluna:
CREATE TABLE T1(
Col1 int,
Col2 xml (Production.ProductDescriptionSchemaCollection));
Exemplo: Passando um parâmetro de tipo XML para um procedimento armazenado
O exemplo a seguir passa um parâmetro xml type para um procedimento armazenado e especifica um esquema para a variável:
CREATE PROCEDURE SampleProc
@ProdDescription xml (Production.ProductDescriptionSchemaCollection)
AS
...
Observe o seguinte sobre a coleção de esquema XML:
Uma coleção de esquema XML está disponível somente no banco de dados no qual foi registrada usando Criando uma coleção de esquema XML.
Caso converta uma cadeia de caracteres para um tipo de dados XML tipado , a análise também realizará a validação e tipagem com base nos namespaces do esquema XML na coleção especificada.
Você pode converter de um tipo de dados xml digitado para um tipo de dados xml não tipado e vice-versa.
Para obter mais informações sobre outras maneiras de gerar XML no SQL Server, consulte Criar instâncias de dados XML. Depois que o XML é gerado, ele pode ser atribuído a uma variável de tipo de dados xml ou armazenado em colunas tipo xml para processamento adicional.
Na hierarquia de tipos de dados, o tipo de dados xml aparece abaixo dos tipos sql_variant e definidos pelo usuário, mas acima de qualquer um dos tipos internos.
Exemplo: Especificando facetas para restringir uma coluna XML digitada
Para colunas de xml digitadas, você pode restringir a coluna para permitir apenas elementos únicos de nível superior para cada instância armazenada nela. Para fazer isso, especifique a faceta DOCUMENT opcional quando uma tabela é criada, conforme mostrado no exemplo a seguir:
CREATE TABLE T(Col1 xml
(DOCUMENT Production.ProductDescriptionSchemaCollection));
GO
DROP TABLE T;
GO
Por padrão, as instâncias armazenadas na coluna de xml digitada são armazenadas como conteúdo XML e não como documentos XML. Isso permite o seguinte:
Zero ou muitos elementos de nível superior
Nós de texto em elementos de nível superior
Você também pode especificar explicitamente esse comportamento adicionando a faceta CONTENT, como demonstrado no exemplo a seguir.
CREATE TABLE T(Col1 xml(CONTENT Production.ProductDescriptionSchemaCollection));
GO -- Default
Você pode especificar as facetas opcionais DOCUMENTO/CONTEÚDO em qualquer lugar onde definir tipo de xml (xml tipado). Por exemplo, ao criar uma variável de xml digitada, você pode adicionar a faceta DOCUMENT/CONTENT, conforme mostrado a seguir:
declare @x xml (DOCUMENT Production.ProductDescriptionSchemaCollection);
Definição de tipo de documento (DTD)
As colunas, variáveis e parâmetros do tipo de dados xml podem ser classificados usando um esquema XML, mas não usando DTD. No entanto, o DTD inline pode ser utilizado tanto para XML não tipado quanto tipado para fornecer valores padrão e substituir referências de entidades por suas formas expandidas.
Você pode converter DTDs em documentos de esquema XML usando ferramentas de terceiros e carregar os esquemas XML no banco de dados.
Atualização do XML tipado do SQL Server 2005
O SQL Server 2008 (10.0.x) fez várias extensões para o suporte ao esquema XML, incluindo suporte para validação lax, manipulação aprimorada de xs:date, xs:time e xs:dateTime dados de instância e adicionou suporte para tipos de lista e união. Na maioria dos casos, as alterações não afetam a experiência de atualização. No entanto, se você usou uma coleção de esquema XML no SQL Server 2005 (9.x) que permitia valores do tipo xs:date, xs:timeou xs:dateTime (ou qualquer subtipo), as seguintes etapas de atualização ocorrem quando você anexa seu banco de dados SQL Server 2005 (9.x) a uma versão posterior do SQL Server:
Para cada coluna XML, que é digitada com uma Coleção de Esquema XML que contém elementos ou atributos que são digitados como xs:anyType, xs:anySimpleType, xs:date ou qualquer um de seus subtipos, xs:time ou qualquer subtipo dela, ou xs:dateTime ou qualquer um de seus subtipos, ou são tipos de união ou lista contendo qualquer um desses tipos ocorre o seguinte:
Todos os índices XML na coluna serão desativados.
Todos os valores do SQL Server 2005 (9.x) continuarão a ser representados no fuso horário Z, porque foram normalizados para o fuso horário Z.
Quaisquer valores de xs:date ou xs:dateTime menores que 1º de janeiro do ano 1 levarão a um erro de tempo de execução quando o índice for reconstruído ou uma instrução XQuery ou XML-DML for executada no tipo de dados xml que contém esse valor.
Quaisquer anos negativos nas facetas de xs:date ou xs:dateTime ou valores padrão numa coleção de esquemas XML serão automaticamente atualizados para o valor mais pequeno permitido pelo tipo base xs:date ou xs:dateTime (por exemplo, 0001-01-01T00:00:00.0000000Z para xs:dateTime).
Você ainda pode usar uma instrução Transact-SQL SELECT para recuperar todo o tipo de dados xml , mesmo que contenha anos negativos. É recomendável substituir anos negativos por um ano dentro do intervalo recém-suportado ou alterar o tipo do elemento ou atributo para xs:string.