Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Aplica a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistema 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
Para obtener información sobre dónde encontrar y cómo ejecutar la utilidad bcp, y sobre las convenciones de sintaxis de las utilidades de la línea de comandos, consulte Utilidades de la línea de comandos de SQL (Motor de base de datos).
Para obtener información sobre cómo preparar datos para operaciones de importación o exportación masivas, vea Preparar los datos para exportación o importación en bloque.
Para obtener más información sobre cuándo se incluyen en el registro de transacciones las operaciones de inserción de filas que se efectúan durante una importación en bloque, vea Requisitos previos para el registro mínimo durante la importación en bloque.
Los caracteres
<,>,|,&y^son caracteres especiales de shell de comandos, y deben ir precedidos por el carácter de escape (^) o estar entre comillas cuando se usan en una cadena (por ejemplo,"StringContaining&Symbol"). Si usa comillas para incluir una cadena que contenga uno de los caracteres especiales, las comillas se establecerán como parte del valor de la variable de entorno. Para obtener más información, consulte Uso de caracteres especiales adicionales.
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 outcrea un archivo de datos denominadoCurrency Types.dat:bcp AdventureWorks2022.Sales.Currency out "Currency Types.dat" -T -cPara 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 bienEncerrar 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-copción o-wsi 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 usabcp out,bcp iny, a continuaciónbcp 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-ty-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
-ty-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.bcpy 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 -TExpanded
En este ejemplo se crea un archivo de datos con el nombre
StockItemTransactions_native.bcpy 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.bcpque 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 -TExpanded
En este ejemplo se usa el archivo de datos
StockItemTransactions_native.bcpque se creó anteriormente. En el ejemplo también se usa laTABLOCKsugerencia 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> -TRevisar
Error_in.logyOutput_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.
Cree una tabla
dbo.T1en la base de datostempdb, con dos columnas,IDyName.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'); GOGenere 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,RandolphGenerar 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:
Formatos de datos para la importación o exportación masiva (SQL Server)
Mantenimiento de valores NULL o predeterminados durante la importación en bloque (SQL Server)
Mantenimiento de valores de identidad al importar datos en bloque (SQL Server)
Dar formato a los archivos para importar o exportar datos (SQL Server)
- Creación de un archivo de formato con bcp (SQL Server)
- Uso de un archivo de formato para la importación en bloque de datos (SQL Server)
- Usar un archivo de formato para omitir una columna de tabla (SQL Server)
- Uso de un archivo de formato para omitir un campo de datos (SQL Server)
- Uso de un archivo de formato para asignar columnas de tabla a campos de un archivo de datos (SQL Server)
Examples de importación y exportación masiva de documentos XML (SQL Server)
Contenido relacionado
- Preparación de los datos para la exportación o importación en bloque
- BULK INSERT (Transact-SQL)
- OPENROWSET (Transact-SQL)
- SET QUOTED_IDENTIFIER (Transact-SQL)
- sp_configure (Transact-SQL)
- sp_tableoption (Transact-SQL)
- Archivos de formato para importar y exportar datos (SQL Server)
Obtener ayuda
- Ideas para SQL: ¿Tiene sugerencias para mejorar SQL Server?
- Preguntas y respuestas de Microsoft (SQL Server)
- DBA Stack Exchange (etiqueta sql-server): Hacer preguntas sobre SQL Server
- Stack Overflow (etiqueta sql-server): Respuestas a preguntas de desarrollo de SQL
- Información y términos de licencia de Microsoft SQL Server
- Opciones de soporte técnico para usuarios profesionales
- Comentarios y ayuda adicional sobre SQL Server
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.