Copia masiva de datos con bcp en SQL Server en Linux

Se aplica a:SQL Server: Linux

En este artículo se muestra cómo usar la utilidad bcp para realizar una copia masiva de datos entre una instancia de SQL Server en Linux y un archivo de datos en un formato especificado por el usuario.

Puede usar bcp para importar un número elevado de filas en tablas de SQL Server o para exportar datos de tablas de SQL Server a archivos de datos. Excepto cuando se usa con la opción queryout, bcp no exige ningún conocimiento de Transact-SQL. La utilidad de línea de comandos bcp funciona con Microsoft SQL Server en un entorno local o en la nube, en Linux, Windows o Docker y Azure SQL Database y Azure Synapse Analytics.

En este artículo aprenderá a:

  • Importación de datos en una tabla mediante el comando bcp in
  • Exportación de datos de una tabla mediante el comando bcp out

Instalación de las herramientas de línea de comandos de SQL Server

bcp forma parte de las herramientas de línea de comandos de SQL Server, que no se instalan automáticamente con SQL Server en Linux. Si aún no ha instalado las herramientas de línea de comandos de SQL Server en el equipo Linux, debe instalarlas. Para obtener más información sobre cómo instalar las herramientas, seleccione la distribución de Linux en la siguiente lista:

Importación de datos con bcp

En este tutorial se crean una base de datos y una tabla de muestra en la instancia local de SQL Server (localhost) y, luego, se usa bcp para cargar la tabla de muestra desde un archivo de texto en el disco.

Creación de una base de datos y una tabla de ejemplo

Comencemos por crear una base de datos de ejemplo con una tabla sencilla que se use durante el resto de este tutorial.

  1. En el cuadro Linux, abra un terminal de comandos.

  2. Copie y pegue los siguientes comandos en la ventana del terminal. Estos comandos usan la utilidad de línea de comandos sqlcmd para crear una base de datos de muestra (BcpSampleDB) y una tabla (TestEmployees) en la instancia local de SQL Server (localhost). Recuerde reemplazar username y <your_password> según sea necesario antes de ejecutar los comandos.

Cree la base de datos BcpSampleDB:

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

Cree la tabla TestEmployees en la base de datos 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));"

Creación del archivo de datos de origen

Copie y pegue el siguiente comando en la ventana del terminal. Se usa el comando cat integrado para crear un archivo de datos de texto de muestra con tres registros. Guarde el archivo en el directorio de inicio como ~/test_data.txt. Los campos de los registros se delimitan mediante una coma.

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

Para comprobar que el archivo de datos se ha creado correctamente, ejecute el siguiente comando en la ventana del terminal:

cat ~/test_data.txt

Esto debería mostrar lo siguiente en la ventana del terminal:

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

Importación de datos desde el archivo de datos de origen

Copie y pegue los siguientes comandos en la ventana del terminal. Este comando usa bcp para conectarse a la instancia local de SQL Server (localhost) e importar los datos del archivo de datos (~/test_data.txt) en la tabla (TestEmployees) de la base de datos (BcpSampleDB). Recuerde reemplazar el nombre de usuario y <your_password> según sea necesario antes de ejecutar los comandos.

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

Esta es una breve introducción a los parámetros de línea de comandos que se han usado con bcp en este ejemplo:

  • -S: especifica la instancia de SQL Server a la que hay que conectarse.
  • -U: especifica el identificador de inicio de sesión para conectar con SQL Server.
  • -P: especifica la contraseña del identificador de inicio de sesión.
  • -d: especifica la base de datos a la que conectarse.
  • -c: realiza operaciones con un tipo de datos de caracteres.
  • -t: especifica el terminador de campo. Se usa comma como terminador de campo para los registros del archivo de datos

Nota:

En este ejemplo no se especifica un terminador de fila personalizado. Las filas del archivo de datos de texto se han finalizado correctamente con newline al usar antes el comando cat para crear el archivo de datos.

Para comprobar que los datos se han importado correctamente, ejecute el siguiente comando en la ventana del terminal. Recuerde reemplazar username y <your_password> según sea necesario antes de ejecutar el comando.

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

Esto debería mostrar los siguientes resultados:

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

Exportación de datos con bcp

En este tutorial se usa bcp para exportar datos de la tabla de muestra creada anteriormente a un nuevo archivo de datos.

Copie y pegue los siguientes comandos en la ventana del terminal. Estos comandos usan la utilidad de línea de comandos bcp para exportar datos de la tabla TestEmployees de la base de datos BcpSampleDB a un nuevo archivo de datos denominado ~/test_export.txt. Recuerde reemplazar el nombre de usuario y <your_password> según sea necesario antes de ejecutar el comando.

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

Para comprobar que los datos se han exportado correctamente, ejecute el siguiente comando en la ventana del terminal:

cat ~/test_export.txt

Esto debería mostrar lo siguiente en la ventana del terminal:

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