Compartilhar via


Carregando dados XML

É possível transferir dados XML do SQL Server 2000 para o SQL Server 2005 ou SQL Server 2008 de várias maneiras. Por exemplo:

  • Se você tiver dados em uma coluna de imagem ou [n]text em um banco de dados do SQL Server 2000, poderá importar a tabela em uma versão posterior do banco de dados usando Integration Services. Altere o tipo da coluna para XML usando a instrução ALTER TABLE.

  • É possível copiar os dados em massa do SQL Server 2000 usando bcp out e, em seguida, inserir os dados em massa no banco de dados da versão posterior usando bcp in.

  • Se você tiver dados em colunas relacionais em um banco de dados do SQL Server 2000, crie uma nova tabela com uma coluna [n]text e, opcionalmente, uma coluna de chave primária para um identificador de linha. Use programação do lado do cliente para recuperar o XML gerado no servidor com FOR XML e gravá-la na coluna [n]text. Em seguida, use as técnicas mencionadas anteriormente para transferir dados para um banco de dados de versão posterior. É possível optar por gravar diretamente o XML em uma coluna XML no banco de dados da versão posterior.

Carregando dados XML em massa

É possível carregar dados XML em massa no servidor usando os recursos de carregamento em massa do SQL Server, como bcp. O OPENROWSET permite carregar dados de arquivos em uma coluna de XML. O exemplo a seguir ilustra esse ponto.

Exemplo: Carregando XML de arquivos

Este exemplo mostra como inserir uma linha na tabela T. O valor da coluna XML é carregado do arquivo C:\MyFile\xmlfile.xml como CLOB, e a coluna de inteiro recebe o valor 10.

INSERT INTO T
SELECT 10, xCol
FROM    (SELECT *    
    FROM OPENROWSET (BULK 'C:\MyFile\xmlfile.xml', SINGLE_CLOB) 
 AS xCol) AS R(xCol)

Codificação de texto

O SQL Server armazena dados XML em Unicode (UTF-16). Os dados XML recuperados do servidor são fornecidos em codificação UTF-16. Para obter uma codificação diferente, você precisa executar a conversão necessária nos dados recuperados. Às vezes, os dados XML podem estar em uma codificação diferente. Nesse caso, você precisará ter cuidado durante o carregamento dos dados. Por exemplo:

  • Se o texto XML estiver em Unicode (UCS-2, UTF-16), você poderá atribuí-lo a uma coluna, variável ou parâmetro XML sem nenhum problema.

  • Se a codificação não for Unicode e for implícita, por causa da página de código de origem, a página de código da cadeia de caracteres no banco de dados deverá ser igual ou compatível com os pontos de código que você deseja carregar. Se necessário, use COLLATE. Se não houver nenhuma página de código desse tipo, será necessário adicionar uma declaração XML explícita com a codificação correta.

  • Para usar uma codificação explícita, use o tipo varbinary(), que não tem nenhuma interação com páginas de código. ou use um tipo de cadeia de caracteres da página de código apropriada. Em seguida, atribua os dados a uma coluna, variável ou parâmetro XML.

Exemplo: Especificando uma codificação explicitamente

Assuma que você tem um documento XML, vcdoc, armazenado como varchar(max) que não tem uma declaração XML explícita. A instrução a seguir adiciona uma declaração XML com a codificação "iso8859-1", concatena o documento XML, converte o resultado em varbinary(max) de forma que a representação de bytes seja preservada e, finalmente, converte-o em XML. Isso permite que o processador XML analise os dados de acordo com a codificação "iso8859-1" especificada e gere a representação UTF-16 correspondente para valores de cadeias de caracteres.

SELECT CAST( 
CAST (('<?xml version="1.0" encoding="iso8859-1"?>'+ vcdoc) AS VARBINARY (MAX)) 
 AS XML)

Incompatibilidades de codificação de cadeia de caracteres

Se você copiar e analisar XML como uma cadeia de caracteres literal na janela Editor de Consultas no SQL Server Management Studio, poderá experimentar incompatibilidades de codificação de cadeia de caracteres [N]VARCHAR. Isso dependerá da codificação de sua instância XML. Em muitas casos, você poderá desejar remover a declaração XML. Por exemplo:

<?xml version="1.0" encoding="UTF-8"?>
  <xsd:schema …

Você deve incluir um N para transformar a instância de XML em uma instância de Unicode. Por exemplo:

-- Assign XML instance to a variable.
DECLARE @X XML
SET @X = N'…'
-- Insert XML instance into an xml type column.
INSERT INTO T VALUES (N'…')
-- Create an XML schema collection
CREATE XML SCHEMA COLLECTION XMLCOLL1 AS N'<xsd:schema … '

Consulte também

Conceitos