Partilhar via


Usar formato nativo para importar ou exportar dados (SQL Server)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do Azure do Azure Synapse AnalyticsAnalytics Platform System (PDW)

É recomendado o formato nativo quando se transfere dados em massa entre várias instâncias do SQL Server usando um ficheiro de dados que não contenha nenhum caractere do DBCS (conjunto de caracteres estendido/byte duplo).

Observação

Para transferir dados em massa entre várias instâncias do SQL Server usando um arquivo de dados que contenha caracteres estendidos ou DBCS, você deve usar o formato nativo Unicode. Para obter mais informações, consulte Usar o formato nativo Unicode para importar ou exportar dados (SQL Server).

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

  1. Exportar em massa os dados de uma tabela de origem para um arquivo de dados

  2. Importação em massa dos dados do arquivo de dados para a tabela de destino

O uso do formato nativo entre tabelas idênticas evita a conversão desnecessária de tipos de dados de e para o formato de caracteres, economizando tempo e espaço. Para alcançar a taxa de transferência ideal, no entanto, poucas verificações são realizadas em relação à formatação de dados. Para evitar problemas com os dados carregados, consulte a seguinte lista de restrições.

Limitações

Para importar dados em formato nativo com êxito, certifique-se de 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 por diante), ou você deve usar um arquivo de formato para mapear cada campo para suas colunas correspondentes.

    Observação

    Se você importar dados de um arquivo incompatível com a tabela de destino, a operação de importação poderá ser bem-sucedida, mas os valores de dados inseridos na tabela de destino provavelmente estarão incorretos. Isso ocorre porque os dados do arquivo são interpretados usando o formato da tabela de destino. Portanto, qualquer incompatibilidade resulta na inserção de valores incorretos. No entanto, em nenhuma circunstância essa incompatibilidade pode causar inconsistências lógicas ou físicas na base de dados.

    Para obter informações sobre como usar arquivos de formato, consulte Formatar arquivos para importar ou exportar dados (SQL Server).

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

Como o bcp lida com dados em formato nativo

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

  • Dados sem caracteres

    O utilitário bcp usa o formato de dados binários internos do SQL Server para gravar dados sem caracteres de uma tabela em um arquivo de dados.

  • dados char ou dados varchar

    No início de cada campo char ou varchar , bcp adiciona o comprimento do prefixo.

    Importante

    Quando o modo nativo é usado, por padrão, o utilitário bcp converte caracteres do SQL Server em caracteres OEM antes de copiá-los para um arquivo de dados. O utilitário bcp converte caracteres de um arquivo de dados em caracteres ANSI antes de importá-los em massa para uma tabela do SQL Server. Durante essas conversões, os dados de caracteres estendidos podem ser perdidos. Para caracteres estendidos, use o formato nativo Unicode ou especifique uma página de código.

  • sql_variant dados

    Se sql_variant dados forem armazenados como SQLVARIANT em um arquivo de dados de formato nativo, os dados manterão todas as suas características. Os metadados que registram o tipo de dados de cada valor de dados são armazenados junto com o valor de dados. Esses metadados são usados para recriar o valor de dados 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 de dados será convertido para o 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 de dados, o lote atual será revertido. Quaisquer valores char e varchar transferidos entre colunas sql_variant podem ter problemas de conversão de página de código.

    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 para uma tabela usando bcp, BULK INSERT ou INSERT ... SELECIONE * DE OPENROWSET(BULK...). Para um comando bcp ou instrução BULK INSERT , você pode especificar o formato de dados na instrução. Para uma instrução INSERT ... SELECT * FROM OPENROWSET(BULK...), deve especificar o formato dos dados num ficheiro de formato.

O formato nativo é suportado pelas seguintes opções de comando:

Comando Opção Descrição
bcp -n Faz com que o utilitário bcp use os tipos de dados nativos dos dados.*
BULK INSERT DATAFILETYPE ='native' Utiliza os tipos de dados nativos ou amplamente nativos. DATAFILETYPE não é necessário se um arquivo de formato especificar os tipos de dados.
OPENROWSET N/A Deve usar um arquivo de formato

* Para carregar dados nativos (-n) para um formato compatível com versões anteriores de clientes SQL Server, use o switch -V. Para obter mais informações, consulte Importar dados nativos e de formato de caractere de versões anteriores do SQL Server.

Observação

Como alternativa, você pode especificar a formatação por campo em um arquivo de formato. Para obter mais informações, consulte Formatar arquivos para importar ou exportar dados (SQL Server).

Exemplo de condições de ensaio

Os exemplos usam a base de dados e os arquivos de formato criados neste artigo.

Tabela de exemplo

O script abaixo cria um banco de dados de teste, uma tabela nomeada myNative e preenche a tabela com alguns valores iniciais. Execute o seguinte Transact-SQL no Microsoft SQL Server Management Studio (SSMS):

CREATE DATABASE TestDatabase;
GO

USE TestDatabase;
CREATE TABLE dbo.myNative ( 
   PersonID smallint NOT NULL,
   FirstName varchar(25) NOT NULL,
   LastName varchar(30) NOT NULL,
   BirthDate date,
   AnnualSalary money
   );

-- Populate table
INSERT TestDatabase.dbo.myNative
VALUES 
(1, 'Anthony', 'Grosse', '1980-02-23', 65000.00),
(2, 'Alica', 'Fatnowna', '1963-11-14', 45000.00),
(3, 'Stella', 'Rossenhain', '1992-03-02', 120000.00);

-- Review Data
SELECT * FROM TestDatabase.dbo.myNative;

Exemplo de arquivo de formato não-XML

O SQL Server oferece suporte a dois tipos de arquivo de formato: formato não XML e formato XML. O formato não XML é o formato original suportado por versões anteriores do SQL Server. Consulte Usar arquivos de formato não XML (SQL Server) para obter informações detalhadas. O comando a seguir usará o utilitário bcp para gerar um arquivo de formato não-xml, myNative.fmt, com base no esquema de myNative. Para usar um comando bcp para criar um arquivo de formato, especifique o format argumento e use nul em vez de um caminho de arquivo de dados. A opção de formato também requer a -f opção. Além disso, para este exemplo, o qualificador c é usado para especificar dados de caracteres e T é usado para especificar uma conexão confiável usando segurança integrada. Em um prompt de comando, digite os seguintes comandos:

bcp TestDatabase.dbo.myNative format nul -f D:\BCP\myNative.fmt -T 

REM Review file
Notepad D:\BCP\myNative.fmt

Importante

Verifique se o arquivo de formato não XML termina com um retorno de carro\feed de linha. Caso contrário, você provavelmente receberá a seguinte mensagem de erro:

SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]I/O error while reading BCP format file

Exemplos

Os exemplos utilizam o banco de dados e os ficheiros de formato criados neste artigo.

Usar bcp e formato nativo para exportar dados

O -n switch e o OUT comando.

O arquivo de dados criado neste exemplo será usado em exemplos subsequentes.

Em um prompt de comando, digite os seguintes comandos:

bcp TestDatabase.dbo.myNative OUT D:\BCP\myNative.bcp -T -n

REM Review results
NOTEPAD D:\BCP\myNative.bcp

Use bcp e formato nativo para importar dados sem um arquivo de formato

O -n switch e o IN comando.

Em um prompt de comando, digite os seguintes comandos:

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myNative;"

REM Import data
bcp TestDatabase.dbo.myNative IN D:\BCP\myNative.bcp -T -n

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myNative;"

Usar bcp e formato nativo para importar dados com um arquivo de formato não XML

Os interruptores -n e -f e o comando IN.

Em um prompt de comando, digite os seguintes comandos:

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myNative;"

REM Import data
bcp TestDatabase.dbo.myNative IN D:\BCP\myNative.bcp -f D:\BCP\myNative.fmt -T

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myNative;"

Use BULK INSERT e formato nativo sem um arquivo de formato

O DATAFILETYPE argumento.

Execute o seguinte Transact-SQL no Microsoft SQL Server Management Studio (SSMS):

TRUNCATE TABLE TestDatabase.dbo.myNative; -- for testing
BULK INSERT TestDatabase.dbo.myNative
    FROM 'D:\BCP\myNative.bcp'
    WITH (
        DATAFILETYPE = 'native'
        );

-- review results
SELECT * FROM TestDatabase.dbo.myNative;

Use BULK INSERT e formato nativo com um ficheiro de formato não XML

O FORMATFILE argumento.

Execute o seguinte Transact-SQL no Microsoft SQL Server Management Studio (SSMS):

TRUNCATE TABLE TestDatabase.dbo.myNative; -- for testing
BULK INSERT TestDatabase.dbo.myNative
   FROM 'D:\BCP\myNative.bcp'
   WITH (
        FORMATFILE = 'D:\BCP\myNative.fmt'
        );

-- review results
SELECT * FROM TestDatabase.dbo.myNative;

Use o OPENROWSET e o formato nativo com um ficheiro de formato não-XML

O FORMATFILE argumento.

Execute o seguinte Transact-SQL no Microsoft SQL Server Management Studio (SSMS):

TRUNCATE TABLE TestDatabase.dbo.myNative;  -- for testing
INSERT INTO TestDatabase.dbo.myNative
    SELECT *
    FROM OPENROWSET (
        BULK 'D:\BCP\myNative.bcp', 
        FORMATFILE = 'D:\BCP\myNative.fmt'  
        ) AS t1;

-- review results
SELECT * FROM TestDatabase.dbo.myNative;

Para usar formatos de dados para importação ou exportação em massa: