Usar o formato de caractere para importar ou exportar dados (SQL Server)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)

Formato de caractere é recomendado quando você exporta dados em massa para um arquivo de texto que será usado em outro programa ou quando você importa dados em massa de um arquivo de texto que é gerado por outro programa.

Formato de caractere usa o formato de dados de caractere para todas as colunas. Armazenar informações em formato de caractere é útil quando os dados são usados com outro programa, como uma planilha, ou quando os dados precisam ser copiados em uma instância de SQL Server de outro fornecedor de banco de dados como Oracle.

Observação

Quando você transfere dados em massa entre instâncias do Microsoft SQL Server e o arquivo de dados contém dados de caractere Unicode mas não caracteres estendidos ou DBCS, use o formato de caractere Unicode. Para obter mais informações, confira Usar o formato de caractere Unicode para importar ou exportar dados (SQL Server).

Neste tópico:
Considerações sobre usar o formato de caractere
Opções de comando para formato de caractere
Condições de teste de exemplo
 ● Tabela de amostra
 ● Arquivo em formato não XML de amostra
Exemplos
 ● Usando bcp e formato de caractere para exportar dados
 ● Usando bcp e formato de caractere para importar dados sem um arquivo de formato
 ● Usando bcp e formato de caractere para importar dados com um arquivo de formato não XML
 ● Usando BULK INSERT e formato de caractere sem um arquivo de formato
 ● Usando BULK INSERT e formato de caractere com um arquivo de formato não XML
 ● Usando OPENROWSET e formato de caractere com um arquivo de formato não XML
Tarefas relacionadas

Considerações sobre usar o formato de caractere

Ao usar formato de caractere, considere o seguinte:

  • Por padrão, o utilitário bcp separa os campos dos dados de caractere com o caractere de guia e termina os registros com o caractere de nova linha. Para obter informações sobre como especificar terminadores alternativos, consulte Especificar terminadores de campo e linha (SQL Server).

  • Por padrão, antes da exportação ou importação em massa de dados do modo de caractere, são executadas as conversões seguintes:

    Direção da operação em massa Conversão
    Exportação Converte dados para representação de caractere. Se solicitado explicitamente, os dados são convertidos à página de código solicitada para colunas de caractere. Se nenhuma página de código for especificada, os dados de caractere serão convertidos usando a página de código OEM do computador do cliente.
    Importar Converte dados de caractere em representação nativa e traduz os dados de caractere da página de código do cliente para a página de código da(s) coluna(s) de destino, quando necessário.
  • Para evitar a perda de caracteres estendidos durante conversão, use formato de caractere Unicode ou especifique uma página de código.

  • São armazenados quaisquer dados sql_variant em um arquivo do formato de caractere sem metadados. Cada valor de dados é convertido ao formato char , de acordo com as regras de conversão de dados implícita. Quando importado em uma coluna sql_variant , os dados são importados como char. Quando importado em uma coluna com um tipo de dados diferente de sql_variant, os dados são convertidos de char usando conversão implícita. Para obter mais informações sobre conversão de dados, consulte Conversão de tipo de dados (Mecanismo de Banco de Dados).

  • O utilitário bcp exporta valores money como arquivos de dados do formato de caractere com quatro dígitos depois do ponto decimal e sem qualquer símbolo de agrupamento de dígito como separadores de vírgula. Por exemplo, uma coluna money que contém o valor 1,234,567.123456 é exportada em massa para um arquivo de dados como a cadeia de caracteres 1234567.1235.

Opções de comando para formato de caractere

Você pode importar dados de formato de caractere 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 instrução. Para uma instrução INSERT... SELECT * FROM OPENROWSET(BULK...), é necessário especificar o formato dos dados em um arquivo de formato.

Formato de caractere tem suporte nas seguintes opções de comando:

Comando Opção Descrição
bcp -c Faz com que o utilitário bcp use os dados de caractere.*
BULK INSERT DATAFILETYPE ='char' Use o formato de caractere quando na importação em massa de dados.
OPENROWSET N/D Deve usar um arquivo de formato

*Para carregar dados de caractere ( -c) em um formato compatível com versões anteriores de clientes do SQL Server, use a opção -V. Para obter mais informações, consulte Importar dados de formato de caractere e nativo 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, confira Arquivos de formato para importação ou exportação de dados (SQL Server).

Condições de teste de exemplo

Os exemplos neste tópico baseiam-se na tabela e no arquivo de formato definidos abaixo.

Tabela de exemplo

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

CREATE DATABASE TestDatabase;
GO

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

-- Populate table
INSERT TestDatabase.dbo.myChar
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.myChar;

Exemplo de arquivo de formato não XML

O SQL Server dá suporte a dois tipos de arquivo de formato: XML e não XML. O formato não XML é o formato original com suporte em versões anteriores do SQL Server. Examine 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, myChar.fmt, com base no esquema de myChar. Para usar um comando bcp para criar um arquivo de formato, especifique o argumento format e use nul em vez de um caminho de arquivo de dados. A opção format também exige a opção -f . Além disso, neste exemplo, o qualificador c é usado para especificar dados de caractere, e T é usado para especificar uma conexão confiável usando a segurança integrada. No prompt de comando, digite o seguinte comando:

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

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

Importante

Verifique se o arquivo de formato não XML termina com um retorno de carro/alimentação 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 abaixo usam o banco de dados e os arquivos de formato criados acima.

Usando bcp e formato de caractere para exportar dados

Opção -c e comando OUT . Observação: o arquivo de dados criado neste exemplo será usado em todos os exemplos subsequentes. No prompt de comando, digite o seguinte comando:

bcp TestDatabase.dbo.myChar OUT D:\BCP\myChar.bcp -T -c

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

Usando bcp e formato de caractere para importar dados sem um arquivo de formato

Opção -c e comando IN . No prompt de comando, digite o seguinte comando:

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

REM Import data
bcp TestDatabase.dbo.myChar IN D:\BCP\myChar.bcp -T -c

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

Usando bcp e formato de caractere para importar dados com um arquivo de formato não XML

Opções -c e -f switches e IN comme. No prompt de comando, digite o seguinte comando:

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

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

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

Usando BULK INSERT e formato de caractere sem um arquivo de formato

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

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

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

Usando BULK INSERT e formato de caractere com um arquivo de formato não XML

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

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

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

Usando OPENROWSET e formato de caractere com um arquivo de formato não XML

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

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

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

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

Consulte Também

Utilitário bcp
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
Tipos de dados (Transact-SQL)
Importar dados de formato de caractere e nativo de versões anteriores do SQL Server