Copiar dados em massa com bcp para o SQL Server em Linux

Aplica-se a: SQL Server - Linux

Este artigo mostra como usar o utilitário bcp para copiar dados em massa entre uma instância do SQL Server no Linux e um arquivo de dados em um formato especificado pelo usuário.

Você pode usar o bcp para importar grande número de linhas em tabelas do SQL Server ou para exportar dados de tabelas do SQL Server para arquivos de dados. Exceto quando usado com a opção queryout, o bcp não exige conhecimento em Transact-SQL. O utilitário de linha de comando bcp funciona com o Microsoft SQL Server em execução local ou na nuvem, no Linux, Windows ou Docker e no Banco de Dados SQL do Azure e no Azure Synapse Analytics.

Este artigo mostra como:

  • importar dados para uma tabela usando o comando bcp in
  • exportar dados de uma tabela usando o comando bcp out

instalar as ferramentas de linha de comando SQL Server

O bcp faz parte das ferramentas de linha de comando do SQL Server, que não são instaladas automaticamente com o SQL Server em Linux. Se ainda não tiver instalado as ferramentas de linha de comando do SQL Server em seu computador Linux, você precisa instalá-las. Para obter mais informações sobre como instalar as ferramentas, selecione sua distribuição do Linux na lista a seguir:

Importar dados com o bcp

Neste tutorial, você cria um banco de dados de exemplo e uma tabela na instância do SQL Server local (localhost) e, em seguida, usa o bcp para carregar na tabela de exemplo de um arquivo de texto em disco.

Criar uma tabela e um banco de dados de exemplo

Vamos começar criando um banco de dados de exemplo com uma tabela simples que é usada no restante deste tutorial.

  1. Na caixa do Linux, abra um terminal de comando.

  2. Copie e cole os comandos a seguir na janela do terminal. Esses comandos usam o utilitário de linha de comando sqlcmd para criar um banco de dados de exemplo (BcpSampleDB) e uma tabela (TestEmployees) na instância do SQL Server local (localhost). Lembre-se de substituir o username e o <your_password> conforme necessário antes de executar os comandos.

Crie o banco de dados BcpSampleDB:

sqlcmd -S localhost -U sa -P <your_password> -Q "CREATE DATABASE BcpSampleDB;"

Crie a tabela TestEmployees no banco de dados BcpSampleDB:

sqlcmd -S localhost -U sa -P <your_password> -d BcpSampleDB -Q "CREATE TABLE TestEmployees (Id INT IDENTITY(1,1) NOT NULL PRIMARY KEY, Name NVARCHAR(50), Location NVARCHAR(50));"

Criar o arquivo de dados de origem

Copie e cole os comandos a seguir na janela do terminal. Usamos o comando interno cat para criar um arquivo de dados de texto de exemplo com três registros e salvar o arquivo no diretório base como ~/test_data.txt. Os campos nos registros são delimitados por uma vírgula.

cat > ~/test_data.txt << EOF
1,Jared,Australia
2,Nikita,India
3,Tom,Germany
EOF

Executando o seguinte comando na janela do terminal, você pode verificar se o arquivo de dados foi criado corretamente:

cat ~/test_data.txt

Isso deve exibir o seguinte na janela do terminal:

1,Jared,Australia
2,Nikita,India
3,Tom,Germany

Importar dados do arquivo de dados de origem

Copie e cole os comandos a seguir na janela do terminal. Esse comando usa bcp para conectar-se à instância do SQL Server local (localhost) e importar os dados do arquivo de dados (~/test_data.txt) para a tabela (TestEmployees) no banco de dados (BcpSampleDB). Lembre-se de substituir o nome de usuário e <your_password> conforme necessário antes de executar os comandos.

bcp TestEmployees in ~/test_data.txt -S localhost -U sa -P <your_password> -d BcpSampleDB -c -t  ','

Aqui está uma breve visão geral dos parâmetros de linha de comando que usamos com o bcp neste exemplo:

  • -S: especifica a instância do SQL Server à qual você deseja se conectar
  • -U: especifica a ID de logon usada para conectar-se ao SQL Server
  • -P: especifica a senha para a ID de logon
  • -d: especifica o banco de dados ao qual se conectar
  • -c: executa operações usando um tipo de dados de caractere
  • -t: especifica o terminador de campo. Estamos usando comma como terminador de campo para os registros em nosso arquivo de dados

Observação

Não estamos especificando um terminador de linha personalizado neste exemplo. As linhas no arquivo de dados de texto foram finalizadas corretamente com newline quando usamos o comando cat para criar o arquivo de dados anteriormente.

Executando o seguinte comando na janela do terminal, você pode verificar se os dados foram importados com êxito. Lembre-se de substituir o username e o <your_password> conforme necessário antes de executar o comando.

sqlcmd -S localhost -d BcpSampleDB -U sa -P <your_password> -I -Q "SELECT * FROM TestEmployees;"

Isso deve exibir os seguintes resultados:

Id          Name                Location
----------- ------------------- -------------------
          1 Jared               Australia
          2 Nikita              India
          3 Tom                 Germany

Exportar dados com o bcp

Neste tutorial, você usará o bcp para exportar dados da tabela de exemplo que criamos anteriormente para um novo arquivo de dados.

Copie e cole os comandos a seguir na janela do terminal. Esses comandos usam o utilitário de linha de comando bcp para exportar dados da tabela TestEmployees no banco de dados BcpSampleDB para um novo arquivo de dados chamado ~/test_export.txt. Lembre-se de substituir o nome de usuário e <your_password> conforme necessário antes de executar o comando.

bcp TestEmployees out ~/test_export.txt -S localhost -U sa -P <your_password> -d BcpSampleDB -c -t ','

Executando o seguinte comando na janela do terminal, você pode verificar se os dados foram exportados corretamente:

cat ~/test_export.txt

Isso deve exibir o seguinte na janela do terminal:

1,Jared,Australia
2,Nikita,India
3,Tom,Germany