Usando formato nativo para importar ou exportar dados

O formato nativo é recomendado quando você transfere dados em massa entre várias instâncias do Microsoft SQL Server usando um arquivo de dados que não contém nenhum conjunto de caracteres estendidos ou DBCS (Conjunto de caracteres de byte duplo).

ObservaçãoObservação

Para transferir dados em massa entre várias instâncias do SQL Server usando um arquivo de dados com caracteres estendidos ou DBCS, use o formato nativo Unicode. Para obter mais informações, consulte Usando o formato nativo Unicode para importar ou exportar dados.

O formato nativo mantém os tipos de dados nativos de um banco de dados. O formato nativo é planejado para transferência de dados em alta velocidade de dados entre tabelas do SQL Server. Se você usar um arquivo de formato, as tabelas de origem e destino não precisarão ser idênticas. A transferência de dados envolve duas etapas:

  1. A exportação de dados em massa de uma tabela de origem para um arquivo de dados

  2. A exportação de dados em massa do arquivo de dados para uma tabela de origem

O uso de formato nativo entre tabelas idênticas evita conversão desnecessária de tipos de dados do e para formato de caractere, economizando tempo e espaço. Porém, para alcançar a taxa de transferência otimizada são executadas algumas verificações referentes à formatação dos dados. Para evitar problemas com os dados carregados, consulte a lista de restrições a seguir.

Restrições

Para importar dados em formato nativo com êxito, garanta que:

  • O arquivo de dados está em formato nativo.

  • A tabela de destino deve ser compatível com o arquivo de dados (com o número correto de colunas, tipo de dados, comprimento, status NULL, e assim sucessivamente) ou você deve usar um arquivo de formato para mapear cada campo para suas colunas correspondentes.

    ObservaçãoObservação

    Se você importar dados de um arquivo que não corresponde à tabela de destino, a operação de importação poderá ter sucesso, mas os valores de dados inseridos na tabela de destino poderão estar incorretos. Isso porque os dados do arquivo são interpretados usando o formato da tabela de destino. Portanto, qualquer resultado divergente resultará na inserção de valores incorretos. Porém, em nenhuma circunstância tal divergência pode causar inconsistências lógicas ou físicas no banco de dados.

    Para obter informações sobre como usar arquivos de formato, consulte Arquivos de formato para importação ou exportação de dados.

Uma importação bem-sucedida não corromperá a tabela de destino.

Como o bcp trata dados no formato nativo

Esta seção discute considerações especiais sobre como o utilitário bcp exporta e importa dados em formato nativo.

  • Dados não caracteres

    O utilitário bcp usa o formato de dados binário interno do SQL Server para gravar dados não caracteres de uma tabela para um arquivo de dados.

  • Dados char ou varchar

    No começo de cada campo char ou varchar, o bcp adiciona o comprimento do prefixo.

    Observação importanteImportante

    Quando o modo nativo é usado, por padrão, o utilitário bcp converte caracteres do SQL Server em caracteres OEM antes de copiá-los em um arquivo de dados. O utilitário bcp converte caracteres de um arquivo de dados em caracteres ANSI antes de importá-los em uma tabela do SQL Server. Durante essas conversões, podem ser perdidos dados de caractere estendidos. Para caracteres estendidos, use o formato nativo Unicode ou especifique uma página de código. Para obter mais informações sobre como usar uma página de código, consulte Copiando dados entre agrupamentos diferentes.

  • Dados sql_variant

    Se dados sql_variant forem armazenados como SQLVARIANT em um arquivo de dados do formato nativo, os dados manterão todas as suas características. Os metadados que registram o tipo de dados de cada valor de dado são armazenados com os valores de dados. Esses metadados são usados para recriar o valor de dado com o mesmo tipo de dados em uma coluna sql_variant de destino.

    Se o tipo de dados da coluna de destino não for sql_variant, cada valor dos dados será convertido no tipo de dados da coluna de destino, seguindo as regras normais de conversão de dados implícita. Se ocorrer um erro durante a conversão dos dados, o lote atual será revertido. Qualquer valor char e varchar transferido entre colunas sql_variant pode ter problemas de conversão de página de código. Para obter mais informações, consulte Copiando dados entre agrupamentos diferentes.

    Para obter mais informações sobre conversão de dados, consulte Conversão de tipo de dados (Mecanismo de Banco de Dados).

Opções de comando para formato nativo

Você pode importar dados de formato nativo em uma tabela que usa bcp, BULK INSERT ou INSERT ... SELECT * FROM OPENROWSET(BULK...). Para um comando bcp ou uma instrução BULK INSERT, você pode especificar o formato de dados na linha de comando. Para uma instrução INSERT ... SELECT * FROM OPENROWSET(BULK...) é necessário especificar o formato dos dados em um arquivo de formato.

O formato nativo tem suporte nas seguintes opções de linha de comando:

Comando

Opção

Descrição

bcp

-n

Faz com que o utilitário bcp use os tipos de dados nativos dos dados.1

BULK INSERT

DATAFILETYPE ='nativo'

Usa o tipo de dados nativo ou nativo largo. Observe que DATAFILETYPE não será necessário se um arquivo de formato especificar os tipos de dados.

1 Para carregar dados nativos (- n) em um formato compatível com versões anteriores de clientes SQL Server, use o comutador - V. Para obter mais informações, consulte Importando dados de formato de caractere e nativo de versões anteriores do SQL Server.

Para obter mais informações, consulte Utilitário bcp, BULK INSERT (Transact-SQL) ou OPENROWSET (Transact-SQL).

ObservaçãoObservação

Como alternativa, você pode especificar a formatação por campo, em um arquivo de formato. Para obter mais informações, consulte Arquivos de formato para importação ou exportação de dados.

Exemplos

Os exemplos a seguir demonstram como exportar em massa dados nativos com o bcp e importar em massa os mesmos dados com o BULK INSERT.

Tabela de exemplo

Os exemplos requerem que uma tabela denominada myTestNativeData seja criada no banco de dados de exemplo AdventureWorks no esquema dbo. Antes de executar os exemplos, é necessário criar essa tabela. No Editor de Consultas do SQL Server Management Studio, execute:

USE AdventureWorks2008R2;
GO
CREATE TABLE myTestNativeData (
   Col1 smallint,
   Col2 nvarchar(50),
   Col3 nvarchar(50)
   ); 

Para popular essa tabela e exibir o conteúdo resultante, execute as seguintes instruções:

INSERT INTO myTestNativeData(Col1,Col2,Col3)
   VALUES(1,'DataField2','DataField3');
INSERT INTO myTestNativeData(Col1,Col2,Col3)
   VALUES(2,'DataField2','DataField3');
GO
SELECT Col1,Col2,Col3 FROM myTestNativeData

Usando o bcp para exportar dados nativos em massa

Para exportar dados da tabela para o arquivo de dados, use o bcp com a opção out e os seguintes qualificadores:

Qualificadores

Descrição

-n

Especifica tipos de dados nativos.

-T

Especifica que o utilitário bcp se conecta ao SQL Server com uma conexão confiável usando segurança integrada. Se -T não for especificado, será necessário especificar -U e -P para ter êxito no logon.

O exemplo a seguir exporta dados em massa no formato nativo da tabela myTestNativeData em um novo arquivo de dados denominado arquivo de dados myTestNativeData-n.Dat. No prompt de comando do Microsoft Windows, digite:

bcp AdventureWorks2008R2..myTestNativeData out C:\myTestNativeData-n.Dat -n -T

Usando BULK INSERT para importar dados nativos em massa

Os exemplos a seguir usam BULK INSERT para importar os dados no arquivo de dados myTestNativeData-n.Dat na tabela myTestNativeData. No Editor de Consultas do SQL Server Management Studio, execute:

USE AdventureWorks2008R2;
GO
BULK INSERT myTestNativeData 
    FROM 'C:\myTestNativeData-n.Dat' 
   WITH (DATAFILETYPE='native'); 
GO
SELECT Col1,Col2,Col3 FROM myTestNativeData
GO