Uso de la utilidad bcp

Aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSistema de Plataforma de Analítica (PDW)Base de datos SQL en Microsoft Fabric

La utilidad de programa de copia masiva (bcp) copia datos de forma masiva entre una instancia de SQL Server y un archivo de datos en un formato especificado por el usuario.

Observaciones

Compatibilidad con archivos de datos nativos

En SQL Server, la utilidad bcp admite archivos de datos nativos compatibles con SQL Server, a partir de SQL Server 2000 (8.x).

Columnas calculadas y columnas de marca de tiempo

Los valores del archivo de datos que se importan para las columnas calculadas o timestamp se omiten y SQL Server asigna valores automáticamente. Si el archivo de datos no contiene valores para las columnas calculadas o de marca de tiempo de la tabla, use un archivo de formato para especificar que deben pasarse por alto las columnas calculadas o de marca de tempo de la tabla al importar los datos. SQL Server asigna valores para la columna automáticamente.

Las columnas calculadas y timestamp se copian en bloque desde SQL Server a un archivo de datos como de costumbre.

Especificación de identificadores que contienen espacios o comillas

Los identificadores de SQL Server pueden incluir caracteres tales como espacios insertados y comillas. Tales identificadores deben tratarse de la siguiente manera:

  • Cuando especifique un identificador o nombre de archivo que incluya un espacio o una comilla en la línea de comandos, coloque el identificador entre comillas dobles ("").

    Por ejemplo, el siguiente comando bcp out crea un archivo de datos denominado Currency Types.dat:

    bcp AdventureWorks2022.Sales.Currency out "Currency Types.dat" -T -c
    
  • Para especificar un nombre de base de datos que contenga un espacio o comillas, debe usar la opción -q.

  • Para nombres de propietario, tabla o vista que contienen espacios incrustados o comillas, puede optar por:

    • Especificar la opción -q, o bien

    • Encerrar el nombre de propietario, tabla o vista entre corchetes ([]) dentro de las comillas.

Validación de datos

bcp valida y comprueba ahora los datos, y ello puede dar lugar a errores en los scripts si se ejecutan con datos no válidos de un archivo. Por ejemplo, bcp ahora comprueba que:

  • Las representaciones nativas de los tipos de datos float o real son válidas.

  • Los datos Unicode tienen una longitud de bytes uniforme.

Es posible que los formularios de datos no válidos que podían importarse de forma masiva en versiones anteriores de SQL Server no se carguen ahora, mientras que, en anteriores versiones, el error no se producía hasta que un cliente intentaba tener acceso a datos no válidos. La validación agregada evita sorpresas cuando se consultan los datos después de una carga masiva.

Exportación o importación masiva de documentos SQLXML

Para importar o exportar de forma masiva datos SQLXML, utilice uno de los tipos de datos siguientes en el archivo de formato.

Tipo de dato Efecto
SQLCHAR o SQLVARYCHAR Los datos se envían en la página de código del cliente o en la página de código implícita en la clasificación. Tiene el mismo efecto que especificar el modificador -c sin indicar un archivo de formato.
SQLNCHAR o SQLNVARCHAR Los datos se envían como datos Unicode. Tiene el mismo efecto que especificar el modificador -w sin indicar un archivo de formato.
SQLBINARY o SQLVARYBIN Los datos se envían sin realizar ninguna conversión.

Procedimientos recomendados para el modo de carácter (-c) y el modo nativo (-n)

Esta sección contiene recomendaciones sobre el modo de carácter (-c) y el modo nativo (-n).

  • (Administrador o usuario) Cuando sea posible, utilice el formato nativo (-n) para evitar problemas con los separadores. Utilice el formato nativo para exportar e importar utilizando SQL Server. Exportar datos de SQL Server mediante la -c opción o -w si tiene previsto exportar los datos a una base de datos que no sea de SQL Server.

  • (Administrador) Compruebe los datos al usar bcp out. Por ejemplo, cuando se usa bcp out, bcp iny, a continuación bcp out , se comprueba que los datos se exportan correctamente y que los valores del terminador no se usan como parte de algún valor de datos. Considere la posibilidad de reemplazar los terminadores predeterminados (utilizando las opciones -t y -r) por valores hexadecimales aleatorios para evitar conflictos entre los valores de terminador y los valores de datos.

  • (Usuario) Utilice un terminador largo y único (cualquier secuencia de bytes o caracteres) para minimizar la posibilidad de conflicto con el valor de cadena real. Esto se puede realizar utilizando las opciones -t y -r.

Examples

Los ejemplos de esta sección usan la base de datos de ejemplo WideWorldImporters para SQL Server 2016 (13.x) y versiones posteriores, Azure SQL Database y Azure SQL Managed Instance. WideWorldImporters se puede descargar desde https://github.com/Microsoft/sql-server-samples/releases/tag/wide-world-importers-v1.0. Consulte Instrucciones RESTORE para conocer la sintaxis para restaurar la base de datos de ejemplo.

Condiciones de prueba de ejemplo

Salvo que se especifique lo contrario, en los ejemplos se asume que se utiliza Autenticación de Windows y que se dispone de una conexión de confianza con la instancia de servidor en la que se ejecuta el comando bcp. En muchos de los ejemplos, se usa un directorio llamado D:\bcp. Reemplaza <server_name> y otros valores de marcadores de posición con valores para tu entorno.

El siguiente script de Transact-SQL crea una copia vacía de la WideWorldImporters.Warehouse.StockItemTransactions tabla y, a continuación, agrega una restricción de clave principal:

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

Puede truncar la tabla StockItemTransactions_bcp según sea necesario:

TRUNCATE TABLE WideWorldImporters.Warehouse.StockItemTransactions_bcp;

A. Identificar la versión de la utilidad bcp

En la línea de comandos, escriba el siguiente comando:

bcp -v

B. Copiar filas de tablas en un archivo de datos (con una conexión de confianza)

En los siguientes ejemplos se ilustra la opción out de la tabla WideWorldImporters.Warehouse.StockItemTransactions.

  • Basic

    En este ejemplo se crea un archivo de datos con el nombre StockItemTransactions_character.bcp y se usa el formato de caracteres para copiar los datos de la tabla en ese archivo.

    En la línea de comandos, escriba el siguiente comando:

    bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\bcp\StockItemTransactions_character.bcp -c -T
    
  • Expanded

    En este ejemplo se crea un archivo de datos con el nombre StockItemTransactions_native.bcp y se usa el formato nativo para copiar los datos de la tabla en ese archivo. En el ejemplo también se especifica el número máximo de errores de sintaxis, un archivo de error y un archivo de salida.

    En la línea de comandos, escriba el siguiente 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
    

Revisar Error_out.log y Output_out.log. Error_out.log debe estar en blanco. Compare los tamaños de archivo entre StockItemTransactions_character.bcp y StockItemTransactions_native.bcp.

C. Copiar filas de tablas en un archivo de datos (con autenticación de modo mixto)

En el siguiente ejemplo, se ilustra la opción out de la tabla WideWorldImporters.Warehouse.StockItemTransactions. En este ejemplo se crea un archivo de datos con el nombre StockItemTransactions_character.bcp y se usa el formato de caracteres para copiar los datos de la tabla en ese archivo.

El ejemplo asume que utiliza autenticación de modo mixto, y debe utilizar el modificador -U para especificar su ID de inicio de sesión. Además, a menos que se esté conectando a la instancia predeterminada de SQL Server en el equipo local, utilice el conmutador -S para especificar el nombre del sistema y, opcionalmente, un nombre de instancia.

En un símbolo del sistema, escriba el comando siguiente (el sistema le pedirá una contraseña):

bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\bcp\StockItemTransactions_character.bcp -c -U<login_id> -S<server_name\instance_name>

D. Copiar datos de un archivo en una tabla

En los ejemplos siguientes, se ilustra la opción in en la tabla WideWorldImporters.Warehouse.StockItemTransactions_bcp con los archivos que se crearon anteriormente.

  • Basic

    En este ejemplo se usa el archivo de datos StockItemTransactions_character.bcp que se creó anteriormente.

    En la línea de comandos, escriba el siguiente comando:

    bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\bcp\StockItemTransactions_character.bcp -c -T
    
  • Expanded

    En este ejemplo se usa el archivo de datos StockItemTransactions_native.bcp que se creó anteriormente. En el ejemplo también se usa la TABLOCK sugerencia y se especifica el tamaño del lote, el número máximo de errores de sintaxis, un archivo de error y un archivo de salida.

    En la línea de comandos, escriba el siguiente 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> -T
    

    Revisar Error_in.log y Output_in.log.

E. Copiar una columna específica en un archivo de datos

Para copiar una columna específica, puede usar la opción queryout. El siguiente ejemplo copia únicamente la columna StockItemTransactionID de la tabla Warehouse.StockItemTransactions en un archivo de datos.

En la línea de comandos, escriba el siguiente comando:

bcp "SELECT StockItemTransactionID FROM WideWorldImporters.Warehouse.StockItemTransactions WITH (NOLOCK)" queryout D:\bcp\StockItemTransactionID_c.bcp -c -T

F. Copiar una fila específica en un archivo de datos

Para copiar una fila específica, puede usar la opción queryout. El siguiente ejemplo copia únicamente la fila correspondiente a la persona con el nombre Amy Trefl de la tabla WideWorldImporters.Application.People en un archivo de datos Amy_Trefl_c.bcp.

Nota:

El -d conmutador se usa para identificar la base de datos.

En la línea de comandos, escriba el siguiente comando:

bcp "SELECT * from Application.People WHERE FullName = 'Amy Trefl'" queryout D:\bcp\Amy_Trefl_c.bcp -d WideWorldImporters -c -T

G. Copiar datos de una consulta en un archivo de datos

Para copiar el conjunto de resultados de una instrucción Transact-SQL en un archivo de datos, use la opción queryout . El ejemplo siguiente copia los nombres de la tabla WideWorldImporters.Application.People , ordenados por nombre completo, en el archivo de datos People.txt .

Nota:

El interruptor -t se usa para crear un archivo delimitado por comas.

En la línea de comandos, escriba el siguiente comando:

bcp "SELECT FullName, PreferredName FROM WideWorldImporters.Application.People ORDER BY FullName" queryout D:\bcp\People.txt -t, -c -T

H. Crear archivos de formato

El ejemplo siguiente crea tres archivos de formato distintos para la tabla Warehouse.StockItemTransactions en la base de datos WideWorldImporters . Revise el contenido de cada archivo creado.

En una línea de comandos, introduzca los siguientes 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

Nota:

El -x conmutador solo es compatible con Windows.

Para obtener más información, vea Usar archivos de formato no XML (SQL Server) y archivos de formato XML (SQL Server).

Yo. Usar un archivo de formato para importación masiva con bcp

Para utilizar un archivo de formato que se haya creado anteriormente al importar datos a una instancia de SQL Server, utilice el modificador -f con la opción in. Por ejemplo, el siguiente comando copia de forma masiva el contenido de un archivo de datos, StockItemTransactions_character.bcp, en una copia de la tabla Warehouse.StockItemTransactions_bcp mediante el archivo de formato creado anteriormente, StockItemTransactions_c.xml.

Nota:

El modificador -L se usa para importar únicamente los 100 primeros registros.

En la línea de comandos, escriba el siguiente comando:

bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp in D:\bcp\StockItemTransactions_character.bcp -L 100 -f D:\bcp\StockItemTransactions_c.xml -T

Nota:

Los archivos de formato son útiles cuando los campos del archivo de datos son diferentes a los de las columnas de la tabla; por ejemplo, en su numeración, orden o tipos de datos. Para obtener más información, vea Archivos de formato para importar o exportar datos (SQL Server).

J. Especificar una página de código

En el siguiente ejemplo de código parcial, se muestra la importación de bcp al especificar una página de código 65001:

bcp MyTable in "D:\data.csv" -T -c -C 65001 -t , ...

K. Ejemplo de archivo de salida con un campo personalizado y terminadores de fila

Este ejemplo muestra dos archivos de muestra, generados por bcp utilizando un campo personalizado y terminadores de fila.

  1. Cree una tabla dbo.T1 en la base de datos tempdb, con dos columnas, ID y Name.

    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');
    GO
    
  2. Genere un archivo de salida a partir de la tabla de ejemplo dbo.T1, utilizando un terminador de campo personalizado.

    En este ejemplo, -t , especifica el terminador de campo personalizado. Reemplace <server_name> con un valor para su entorno.

    bcp dbo.T1 out T1.txt -T -S <server_name> -d tempdb -w -t ,
    

    Este es el conjunto de resultados.

    1,Natalia
    2,Mark
    3,Randolph
    
  3. Generar un archivo de salida a partir de la tabla de ejemplo dbo.T1, utilizando un terminador de campo personalizado y un terminador de fila personalizado.

    En este ejemplo, -t , especifica el terminador de campo personalizado y -r : especifica el terminador de fila personalizado. Reemplace <server_name> por un valor para su entorno.

    bcp dbo.T1 out T1.txt -T -S <server_name> -d tempdb -w -t , -r :
    

    Este es el conjunto de resultados.

    1,Natalia:2,Mark:3,Randolph:
    

    Nota:

    Siempre se añade el terminador de fila, incluso al último registro. El terminador de campo, sin embargo, no se añade al último campo.

Ejemplos adicionales

Los siguientes artículos incluyen ejemplos sobre el uso de bcp:

Obtener ayuda

Contribuya a la documentación de SQL

¿Sabía que puede editar el contenido de SQL usted mismo? Si lo hace, no solo contribuirá a mejorar la documentación, sino que también se le reconocerá como colaborador de la página.

Para obtener más información, consulte Editar documentación de Microsoft Learn.