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
Azure Synapse Analytics
Sistema de Plataforma de Análise (PDW)
Base de dados SQL no Microsoft Fabric
A utilidade de cópia em massa (bcp) copia em massa dados entre uma instância do SQL Server e um ficheiro de dados num formato especificado pelo utilizador.
Observações
Para obter informações sobre onde localizar ou como executar o utilitário bcp e sobre as convenções de sintaxe dos utilitários de prompt de comando, consulte Utilitários de linha de comando SQL (Mecanismo de Banco de Dados).
Para obter informações sobre como preparar dados para operações de importação ou exportação em massa, consulte Preparar dados para exportação ou importação em massa.
Para obter informações sobre quando as operações de inserção de linha executadas por importação em massa são registadas no registo de transações, consulte Pré-requisitos para registo mínimo nade importação em massa.
Os caracteres
<,>,|,&e^são caracteres especiais de shell de comando e devem ser precedidos pelo carácter de escape (^) ou incluídos entre aspas quando usados numa cadeia de texto (por exemplo,"StringContaining&Symbol"). Se você usar aspas para incluir uma cadeia de caracteres que contenha um dos caracteres especiais, as aspas serão definidas como parte do valor da variável de ambiente. Para mais informações, consulte Utilização de caracteres especiais adicionais.
Suporte a arquivos de dados nativos
No SQL Server, o utilitário bcp oferece suporte a arquivos de dados nativos compatíveis com versões do SQL Server a partir do SQL Server 2000 (8.x) e posterior.
Colunas computadas e colunas de timestamp
Os valores nos ficheiros de dados a serem importados para colunas calculadas ou carimbo de data/hora , são ignorados, e o SQL Server atribui valores automaticamente. Se o arquivo de dados não contiver valores para as colunas de carimbo de data/hora computadas ou na tabela, utilize um arquivo de formato para especificar que as colunas de carimbo de data/hora computadas ou na tabela devem ser ignoradas ao importar dados; o SQL Server atribui automaticamente valores para a coluna.
As colunas calculadas e de carimbo de data/hora são copiadas em massa do SQL Server para um arquivo de dados, como de costume.
Especificar identificadores que contenham espaços ou aspas
Os identificadores do SQL Server podem incluir caracteres como espaços incorporados e aspas. Esses identificadores devem ser tratados do seguinte modo:
Quando você especificar um identificador ou nome de arquivo que inclua um espaço ou aspas no prompt de comando, coloque o identificador entre aspas ("").
Por exemplo, o seguinte comando
bcp outcria um arquivo de dados chamadoCurrency Types.dat:bcp AdventureWorks2022.Sales.Currency out "Currency Types.dat" -T -cPara especificar um nome de banco de dados que contenha um espaço ou aspas, você deve usar a opção
-q.Para nomes de proprietário, tabela ou exibição que contenham espaços incorporados ou aspas, você pode:
Especifique a opção
-qouColoque o proprietário, a tabela ou o nome da vista entre parênteses (
[]) dentro das aspas.
Validação de dados
bcp agora impõe a validação de dados e verificações de dados que podem fazer com que os scripts falhem se forem executados em dados inválidos em um arquivo de dados. Por exemplo, bcp agora verifica que:
As representações nativas de tipos de dados flutuantes ou reais são válidas.
Os dados Unicode têm um comprimento de bytes que é par.
Formas de dados inválidos que poderiam ser importadas em massa em versões anteriores do SQL Server podem falhar ao carregar agora; enquanto que, em versões anteriores, a falha não ocorria até que um cliente tentasse acessar os dados inválidos. A validação adicionada minimiza surpresas ao consultar os dados após o carregamento em massa.
Exportação ou importação em massa de documentos SQLXML
Para exportar ou importar dados SQLXML em massa, use um dos seguintes tipos de dados em seu arquivo de formato.
| Tipo de dados | Effect |
|---|---|
SQLCHAR ou SQLVARYCHAR |
Os dados são enviados na página de códigos do cliente ou na página de código implícita pela colação. O efeito é o mesmo que especificar a opção -c sem especificar um arquivo de formato. |
SQLNCHAR ou SQLNVARCHAR |
Os dados são enviados como Unicode. O efeito é o mesmo que especificar a opção -w sem especificar um arquivo de formato. |
SQLBINARY ou SQLVARYBIN |
Os dados são enviados sem qualquer conversão. |
Práticas recomendadas do modo de caractere (-c) e do modo nativo (-n)
Esta seção tem recomendações para o modo de caractere (-c) e modo nativo (-n).
(Administrador/Utilizador) Sempre que possível, use o formato nativo (
-n) para evitar o problema do separador. Use o formato nativo para exportar e importar usando o SQL Server. Exporte dados do SQL Server usando as opções-cou-wse planeia exportar os dados para uma base de dados diferente do SQL Server.(Administrador) Verifique os dados ao usar
bcp out. Por exemplo, quando usarbcp out,bcp ine depoisbcp out, verifique se os dados foram exportados corretamente e se os valores do terminador não são usados como parte de algum valor de dados. Considere substituir os terminadores padrão (usando as opções-te-r) por valores hexadecimais aleatórios para evitar conflitos entre valores de terminador e valores de dados.(Utilizador) Use um terminador longo e exclusivo (qualquer sequência de bytes ou caracteres) para minimizar a possibilidade de um conflito com o valor real da cadeia de caracteres. Isso pode ser feito usando as opções
-te-r.
Examples
Os exemplos nesta seção usam o banco de dados de exemplo WideWorldImporters para SQL Server 2016 (13.x) e versões posteriores, o Banco de Dados SQL do Azure e a Instância Gerenciada SQL do Azure.
WideWorldImporters pode ser baixado do https://github.com/Microsoft/sql-server-samples/releases/tag/wide-world-importers-v1.0. Consulte as instruções RESTORE para obter a sintaxe para restaurar o banco de dados de exemplo.
Exemplo de condições de ensaio
Exceto quando especificado de outra forma, os exemplos pressupõem que você usa a Autenticação do Windows e tem uma conexão confiável com a instância do servidor na qual está executando o comando bcp. Um diretório chamado D:\bcp é usado em muitos dos exemplos. Substitua <server_name> e os outros valores provisórios por valores para o seu ambiente.
O seguinte script Transact-SQL cria uma cópia vazia da tabela WideWorldImporters.Warehouse.StockItemTransactions e, em seguida, adiciona uma restrição de chave primária:
USE WideWorldImporters;
GO
SET NOCOUNT ON;
IF NOT EXISTS (SELECT *
FROM sys.tables
WHERE name = 'Warehouse.StockItemTransactions_bcp')
BEGIN
SELECT *
INTO WideWorldImporters.Warehouse.StockItemTransactions_bcp
FROM WideWorldImporters.Warehouse.StockItemTransactions
WHERE 1 = 2;
ALTER TABLE Warehouse.StockItemTransactions_bcp
ADD CONSTRAINT PK_Warehouse_StockItemTransactions_bcp
PRIMARY KEY NONCLUSTERED (StockItemTransactionID ASC);
END
Você pode truncar a tabela StockItemTransactions_bcp conforme necessário:
TRUNCATE TABLE WideWorldImporters.Warehouse.StockItemTransactions_bcp;
A. Identificar a versão do utilitário bcp
Em um prompt de comando, digite o seguinte comando:
bcp -v
B. Copiar linhas da tabela para um arquivo de dados (com uma conexão confiável)
Os exemplos a seguir ilustram a opção out na tabela WideWorldImporters.Warehouse.StockItemTransactions.
Basic
Este exemplo cria um ficheiro de dados chamado
StockItemTransactions_character.bcpe copia os dados da tabela para ele usando o formato de caractere .Em um prompt de comando, digite o seguinte comando:
bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\bcp\StockItemTransactions_character.bcp -c -TExpanded
Este exemplo cria um arquivo de dados chamado
e copia os dados da tabela para ele usando o formato nativo . O exemplo também: especifica o número máximo de erros de sintaxe, um arquivo de erro e um arquivo de saída. Em um prompt de comando, digite o seguinte comando:
bcp WideWorldImporters.Warehouse.StockItemTransactions OUT D:\bcp\StockItemTransactions_native.bcp -m 1 -n -e D:\bcp\Error_out.log -o D:\bcp\Output_out.log -S <server_name> -T
Reveja Error_out.log e Output_out.log.
Error_out.log deve estar em branco. Compare os tamanhos de arquivo entre StockItemTransactions_character.bcp e StockItemTransactions_native.bcp.
C. Copiar linhas da tabela para um arquivo de dados (com autenticação de modo misto)
O exemplo a seguir ilustra a opção out na tabela WideWorldImporters.Warehouse.StockItemTransactions. Este exemplo cria um ficheiro de dados chamado StockItemTransactions_character.bcp e copia os dados da tabela para ele usando o formato de caractere .
O exemplo pressupõe que você use a autenticação de modo misto e deve usar a opção -U para especificar sua ID de login. Além disso, a menos que você esteja se conectando à instância padrão do SQL Server no computador local, use a opção -S para especificar o nome do sistema e, opcionalmente, um nome de instância.
Em um prompt de comando, digite o seguinte comando: (O sistema solicita sua senha.)
bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\bcp\StockItemTransactions_character.bcp -c -U<login_id> -S<server_name\instance_name>
D. Copiar dados de um ficheiro para uma tabela
Os exemplos a seguir ilustram a opção in na tabela WideWorldImporters.Warehouse.StockItemTransactions_bcp usando arquivos criados anteriormente.
Basic
Este exemplo usa o arquivo de dados
StockItemTransactions_character.bcpcriado anteriormente.Em um prompt de comando, digite o seguinte comando:
bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\bcp\StockItemTransactions_character.bcp -c -TExpanded
Este exemplo usa o arquivo de dados
StockItemTransactions_native.bcpcriado anteriormente. O exemplo também usa oTABLOCKhint e especifica o tamanho do lote, o número máximo de erros de sintaxe, um ficheiro de erro e um ficheiro de saída.Em um prompt de comando, digite o seguinte comando:
bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\bcp\StockItemTransactions_native.bcp -b 5000 -h "TABLOCK" -m 1 -n -e D:\bcp\Error_in.log -o D:\bcp\Output_in.log -S <server_name> -TReveja
Error_in.logeOutput_in.log.
E. Copiar uma coluna específica para um arquivo de dados
Para copiar uma coluna específica, você pode usar a opção queryout. O exemplo a seguir copia apenas a coluna StockItemTransactionID da tabela Warehouse.StockItemTransactions em um arquivo de dados.
Em um prompt de comando, digite o seguinte comando:
bcp "SELECT StockItemTransactionID FROM WideWorldImporters.Warehouse.StockItemTransactions WITH (NOLOCK)" queryout D:\bcp\StockItemTransactionID_c.bcp -c -T
F. Copiar uma linha específica para um arquivo de dados
Para copiar uma linha específica, você pode usar a opção queryout. O exemplo a seguir copia apenas a linha da pessoa chamada Amy Trefl da tabela WideWorldImporters.Application.People para um arquivo de dados Amy_Trefl_c.bcp.
Note
A opção -d é usada para identificar o banco de dados.
Em um prompt de comando, digite o seguinte comando:
bcp "SELECT * from Application.People WHERE FullName = 'Amy Trefl'" queryout D:\bcp\Amy_Trefl_c.bcp -d WideWorldImporters -c -T
G. Copiar dados de uma consulta para um arquivo de dados
Para copiar o conjunto de resultados de uma instrução Transact-SQL para um arquivo de dados, use a opção queryout. O exemplo a seguir copia os nomes da tabela WideWorldImporters.Application.People, ordenados por nome completo, para o arquivo de dados People.txt.
Note
A opção -t é usada para criar um arquivo delimitado por vírgula.
Em um prompt de comando, digite o seguinte comando:
bcp "SELECT FullName, PreferredName FROM WideWorldImporters.Application.People ORDER BY FullName" queryout D:\bcp\People.txt -t, -c -T
H. Criar arquivos de formato
O exemplo a seguir cria três arquivos de formato diferentes para a tabela Warehouse.StockItemTransactions no banco de dados WideWorldImporters. Revise o conteúdo de cada arquivo criado.
Em um prompt de comando, digite os seguintes comandos:
REM non-XML character format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\bcp\StockItemTransactions_c.fmt -c -T
REM non-XML native format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\bcp\StockItemTransactions_n.fmt -n -T
REM XML character format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\bcp\StockItemTransactions_c.xml -x -c -T
Note
O -x switch é suportado apenas no Windows.
Para mais informações, consulte Utilizar ficheiros em formato não XML (SQL Server) e ficheiros em formato XML (SQL Server).
I. Usar um arquivo de formato para importação em massa com bcp
Para usar um ficheiro de formato criado anteriormente ao importar dados para uma instância do SQL Server, use o interruptor -f juntamente com a opção in. Por exemplo, o comando a seguir copia em massa o conteúdo de um arquivo de dados, StockItemTransactions_character.bcp, em uma cópia da tabela Warehouse.StockItemTransactions_bcp usando o arquivo de formato criado anteriormente, StockItemTransactions_c.xml.
Note
A opção -L é usada para importar apenas os primeiros 100 registros.
Em um prompt de comando, digite o seguinte comando:
bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp in D:\bcp\StockItemTransactions_character.bcp -L 100 -f D:\bcp\StockItemTransactions_c.xml -T
Note
Os arquivos de formato são úteis quando os campos do arquivo de dados são diferentes das colunas da tabela; por exemplo, em seu número, ordem ou tipos de dados. Para obter mais informações, consulte Formatar arquivos para importar ou exportar dados (SQL Server).
J. Especificar uma página de código
O exemplo de código parcial a seguir mostra bcp import ao especificar uma página de código 65001:
bcp MyTable in "D:\data.csv" -T -c -C 65001 -t , ...
K. Exemplo de arquivo de saída usando um campo personalizado e terminadores de linha
Este exemplo mostra dois arquivos de exemplo, gerados por bcp usando terminadores de linha e campo personalizados.
Crie uma tabela
dbo.T1no banco de dadostempdb, com duas colunas,IDeName.USE tempdb; GO CREATE TABLE dbo.T1 ( ID INT, [Name] NVARCHAR (20) ); GO INSERT INTO dbo.T1 VALUES (1, N'Natalia'); INSERT INTO dbo.T1 VALUES (2, N'Mark'); INSERT INTO dbo.T1 VALUES (3, N'Randolph'); GOGere um arquivo de saída a partir da tabela de exemplo
dbo.T1, usando um terminador de campo personalizado.Neste exemplo,
-t ,especifica o terminador de campo personalizado. Substitua<server_name>por um valor para o seu ambiente.bcp dbo.T1 out T1.txt -T -S <server_name> -d tempdb -w -t ,Aqui está o conjunto de resultados.
1,Natalia 2,Mark 3,RandolphGere um arquivo de saída a partir da tabela de exemplo
dbo.T1, usando um terminador de campo personalizado e um terminador de linha personalizado.Neste exemplo,
-t ,especifica o terminador de campo personalizado e-r :especifica o terminador de linha personalizado. Substitua<server_name>por um valor para o seu ambiente.bcp dbo.T1 out T1.txt -T -S <server_name> -d tempdb -w -t , -r :Aqui está o conjunto de resultados.
1,Natalia:2,Mark:3,Randolph:Note
O terminador de linha é sempre adicionado, mesmo ao último registro. O terminador de campo, no entanto, não é adicionado ao último campo.
Exemplos adicionais
Os seguintes artigos contêm exemplos de utilização de bcp:
Formatos de dados para importação ou exportação em massa (SQL Server)
Manter valores nulos ou padrão durante a importação em massa (SQL Server)
Manter valores de identidade ao importar dados em massa (SQL Server)
Formatar arquivos para importar ou exportar dados (SQL Server)
- Criar um arquivo de formato com bcp (SQL Server)
- Usar um arquivo de formato para importar dados em massa (SQL Server)
- Usar um arquivo de formato para ignorar uma coluna de tabela (SQL Server)
- Usar um arquivo de formato para ignorar um campo de dados (SQL Server)
- Usar um arquivo de formato para mapear colunas de tabela para campos de arquivo de dados (SQL Server)
Exemplos de importação e exportação em massa de documentos XML (SQL Server)
Conteúdo relacionado
- Preparar dados para exportação ou importação em massa
- INSERÇÃO EM MASSA (Transact-SQL)
- OPENROWSET (Transact-SQL)
- SET QUOTED_IDENTIFIER (Transact-SQL)
- sp_configure (Transact-SQL)
- sp_tableoption (Transact-SQL)
- Formatar arquivos para importar ou exportar dados (SQL Server)
Obter ajuda
- Ideias para SQL: Tens sugestões para melhorar SQL Server?
- Microsoft Q & A (SQL Server)
- DBA Stack Exchange (tag sql-server): Faça perguntas sobre o SQL Server
- Stack Overflow (tag sql-server): respostas a perguntas de desenvolvimento SQL
- Termos e informações de licença do Microsoft SQL Server
- Opções de suporte para utilizadores empresariais
- Ajuda SQL Server adicional e feedback
Contribuir para a documentação do SQL
Você sabia que você mesmo pode editar conteúdo SQL? Se o fizer, não só ajudará a melhorar a nossa documentação, como também será creditado como contribuidor da página.
Para obter mais informações, consulte Editar a documentação do Microsoft Learn.