bcp (utilidad)
La utilidad bcp copia datos de forma masiva entre una instancia de Microsoft SQL Server y un archivo de datos en un formato especificado por el usuario. La utilidad bcp se puede usar para importar un número elevado de filas nuevas en tablas de SQL Server o para exportar datos de tablas a archivos de datos. Excepto cuando se utiliza con la opción queryout, la utilidad no exige ningún conocimiento de Transact-SQL. Para importar datos en una tabla, debe usar un archivo de formato creado para esa tabla o comprender la estructura de la tabla y los tipos de datos que son válidos para sus columnas.
Para obtener información sobre las convenciones de sintaxis de bcp, vea Convenciones de sintaxis de Transact-SQL (Transact-SQL).
Nota |
|---|
Si utiliza bcp para hacer una copia de seguridad de los datos, cree un archivo de formato para registrar el formato de los datos. Los archivos de datos de bcp no incluyen ningún esquema ni información de formato, de modo que si se quita una tabla o vista, y no tiene un archivo de formato, es posible que no pueda importar los datos. |
bcp {[[database_name.][schema].]{table_name | view_name} | "query"}
{in | out | queryout | format} data_file
[-mmax_errors] [-fformat_file] [-x] [-eerr_file]
[-Ffirst_row] [-Llast_row] [-bbatch_size]
[-ddatabase_name] [-n] [-c] [-N] [-w] [-V (70 | 80 | 90 )]
[-q] [-C { ACP | OEM | RAW | code_page } ] [-tfield_term]
[-rrow_term] [-iinput_file] [-ooutput_file] [-apacket_size]
[-S [server_name[\instance_name]]] [-Ulogin_id] [-Ppassword]
[-T] [-v] [-R] [-k] [-E] [-h"hint [,...n]"]
Se el cliente bcp 10.0 está instalado al instalar las herramientas de Microsoft SQL Server 2008 R2. Si se instalan herramientas tanto para SQL Server 2008 R2 como para SQL Server 2005, según el valor de la variable de entorno PATH, es posible utilizar el cliente bcp anterior en lugar del cliente bcp 10.0. Esta variable de entorno define el conjunto de directorios que Windows utiliza para buscar archivos ejecutables. Para saber qué versión está utilizando, ejecute el comando bcp /v en el símbolo del sistema de Windows. Para obtener información acerca del establecimiento de la ruta de comandos en la variable de entorno PATH, vea la Ayuda de Windows.
Los archivos con formato XML solamente se admiten cuando se instalan herramientas de SQL Server con SQL Server Native Client.
Para obtener información acerca de dónde encontrar o cómo ejecutar la utilidad bcp y acerca de las convenciones de sintaxis de las utilidades del símbolo del sistema, vea Utilidades del símbolo del sistema.
Para obtener información acerca de la preparación de los datos para las operaciones de importación y exportación masivas, vea Preparar los datos para exportar o importar de forma masiva.
Para obtener información acerca de cuándo se registran en el registro de transacciones las operaciones de inserción de filas que se efectúan durante la importación masiva, vea Requisitos previos para el registro mínimo durante la importación masiva.
Compatibilidad de los archivos de datos nativos
En SQL Server 2008 R2, la utilidad bcp solamente admite archivos de datos nativos compatibles con SQL Server 2000, SQL Server 2005, SQL Server 2008 ySQL Server 2008 R2.
Columnas calculadas y columnas de marca de tiempo
Los valores del archivo de datos que se importa 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 timestamp de la tabla, utilice un archivo de formato para especificar que deben pasarse por alto las columnas calculadas o timestamp de la tabla al importar datos; SQL Server asigna valores para la columna de forma automática.
Las columnas calculadas y timestamp se copian de forma masiva desde SQL Server en un archivo de datos de la forma habitual.
Especificar identificadores que incluyen 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 comillas en el símbolo del sistema, coloque el identificador entre comillas dobles (" ").
Por ejemplo, el siguiente comando bcp out crea un archivo de datos denominado Currency Types.dat:
bcp AdventureWorks2008R2.Sales.Currency out "Currency Types.dat" -T -c
Para especificar un nombre de base de datos que contenga un espacio o comillas, debe utilizar la opción -q.
Para los nombres de vista, tabla o propietario que contienen espacios insertados o comillas, puede hacer lo siguiente:
Especificar la opción -q, o bien
Incluir el nombre de vista, tabla o propietario entre corchetes ([]) dentro de las comillas.
Validar datos
bcp valida y comprueba ahora los datos, y ello podría dar lugar a errores en los scripts si se ejecutan con datos no válidos de un archivo. Por ejemplo, bcp ahora comprueba que:
La representación nativa de los tipos de datos float o real es válida.
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; 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 datos | Efecto |
|---|---|
SQLCHAR o SQLVARYCHAR | Los datos se envían en la página de códigos del cliente o en la página de códigos implícita en la intercalació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. |
Una operación bcp out requiere permisos SELECT en la tabla de origen.
Una operación bcp in requiere como mínimo permisos SELECT/INSERT en la tabla de destino. Además, se requiere el permiso ALTER TABLE si cualquiera de las siguientes afirmaciones es verdadera:
Existen restricciones y la sugerencia CHECK_CONSTRAINTS no se ha especificado.
NotaLa deshabilitación de restricciones es el comportamiento predeterminado. Para habilitar las restricciones de forma explícita, use la opción -h con la sugerencia CHECK_CONSTRAINTS.
Existen desencadenadores y la sugerencia FIRE_TRIGGER no se ha especificado.
NotaDe forma predeterminada, los desencadenadores no están activados. Para activarlos de forma explícita, use la opción -h con la sugerencia FIRE_TRIGGERS.
La opción -E se utiliza para importar valores de identidad de un archivo de datos.
Nota |
|---|
El requisito del permiso ALTER TABLE en la tabla de destino era nuevo en SQL Server 2005. Este nuevo requisito podría hacer que los scripts de bcp que no exigen las comprobaciones de restricciones y desencadenadores devuelvan un error si la cuenta de usuario no tiene los permisos de tabla ALTER para la tabla de destino. |
Esta sección tiene recomendaciones para el modo de carácter (-c) y el modo nativo (-n).
(Administrador/usuario) Cuando sea posible, use el formato nativo (-n) para evitar el problema del separador. Use el formato nativo para exportar e importar al usar SQL Server. Exporte datos desde SQL Server usando las opciones -c o -w si los datos van a ser exportados a una base de datos que no es deSQL Server database.
(Administrador) Compruebe los datos al usar BCP OUT. Por ejemplo, cuando usa BCP OUT, BCP IN y, después, BCP OUT compruebe que los datos se exportan adecuadamente y que los valores de terminador no se usaron como parte de algunos valores de datos. Considere la anulación de los terminadores predeterminados (usando las opciones -t y -r) con valores hexadecimales aleatorios para evitar conflictos entre los valores de terminador y los valores de datos.
(Usuario) Use un terminador largo y exclusivo (cualquier secuencia de bytes o caracteres) para minimizar la posibilidad de un conflicto con el valor de la cadena actual. Esto se puede hacer utilizando las opciones -t y -r.
Esta sección contiene los siguientes ejemplos:
A. Copiar filas de tablas en un archivo de datos (con una conexión de confianza)
B. Copiar filas de tablas en un archivo de datos (con autenticación de modo mixto)
C. Copiar datos de un archivo en una tabla
D. Copiar una columna específica en un archivo de datos
E. Copiar una fila específica en un archivo de datos
F. Copiar datos de una consulta en un archivo de datos
G. Crear un archivo de formato no XML
H. Crear un archivo de formato XML
I. Utilizar un archivo de formato para importar de forma masiva con bcp
A. Copiar filas de tablas en un archivo de datos (con una conexión de confianza)
El siguiente ejemplo ilustra la opción out de la tabla AdventureWorks2008R2.Sales.Currency. Este ejemplo crea un archivo de datos con el nombre Currency.dat y copia los datos de la tabla en este archivo usando el formato de caracteres. El ejemplo asume que se utiliza la autenticación de Windows y que se tiene una conexión de confianza con la instancia del servidor en la que se ejecuta el comando bcp.
En el símbolo del sistema de Windows, escriba el siguiente comando:
bcp AdventureWorks2008R2.Sales.Currency out Currency.dat -T -c
B. Copiar filas de tablas en un archivo de datos (con autenticación de modo mixto)
El siguiente ejemplo ilustra la opción out de la tabla Sales.Currency. Este ejemplo crea un archivo de datos con el nombre Currency.dat y copia los datos de la tabla en este archivo usando el formato de caracteres.
En el ejemplo se supone que usa la autenticación de modo mixto; debe utilizar el modificador -U para especificar su identificador 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 modificador -S para especificar el nombre del sistema y, opcionalmente, un nombre de instancia.
bcp AdventureWorks2008R2.Sales.Currency out Currency.dat -c -U<login_id> -S<server_name\instance_name>
El sistema le solicitará la contraseña.
C. Copiar datos de un archivo en una tabla
El siguiente ejemplo ilustra la opción in utilizando el archivo creado en el ejemplo anterior (Currency.dat). No obstante, en primer lugar, este ejemplo crea una copia vacía de la tabla de Sales.Currency, Sales.Currency2, en la que se copian los datos. El ejemplo asume que se utiliza la autenticación de Windows y que se tiene una conexión de confianza con la instancia del servidor en la que se ejecuta el comando bcp.
Para crear la tabla vacía, en el Editor de consultas, escriba el siguiente comando:
USE AdventureWorks2008R2; GO SELECT * INTO AdventureWorks2008R2.Sales.Currency2 FROM AdventureWorks2008R2.Sales.Currency WHERE 1=2
Para realizar una copia masiva de los datos de caracteres en la nueva tabla, es decir, para importar los datos, escriba el siguiente comando en un símbolo del sistema:
bcp AdventureWorks2008R2.Sales.Currency2 in Currency.dat -T -c
Para comprobar que el comando se ha ejecutado correctamente, muestre el contenido en el Editor de consultas y escriba:
USE AdventureWorks2008R2; GO SELECT * FROM Sales.Currency2;
D. 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 Name de la tabla de Sales.Currency en un archivo de datos. El ejemplo asume que se utiliza la autenticación de Windows y que se tiene una conexión de confianza con la instancia del servidor en la que se ejecuta el comando bcp.
En el símbolo del sistema de Windows, escriba:
bcp "SELECT Name FROM AdventureWorks2008R2.Sales.Currency" queryout Currency.Name.dat -T -c
E. 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 del contacto con el nombre Jarrod Rana de la tabla de Person.Person en un archivo de datos (Jarrod Rana.dat).El ejemplo asume que se utiliza la autenticación de Windows y que se tiene una conexión de confianza con la instancia del servidor en la que se ejecuta el comando bcp.
En el símbolo del sistema de Windows, escriba:
bcp "SELECT * FROM AdventureWorks2008R2.Person.Person WHERE FirstName='Jarrod' AND LastName='Rana' " queryout "Jarrod Rana.dat" -T -c
F. 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, utilice la opción queryout. El siguiente ejemplo copia los nombres de la tabla de AdventureWorks2008R2.Person.Person, ordenados por el apellido y después por el nombre, en el archivo de datos Contacts.txt. El ejemplo asume que se utiliza la autenticación de Windows y que se tiene una conexión de confianza con la instancia del servidor en la que se ejecuta el comando bcp.
En el símbolo del sistema de Windows, escriba:
bcp "SELECT FirstName, LastName FROM AdventureWorks2008R2.Person.Person ORDER BY LastName, Firstname" queryout Contacts.txt -c -T
G. Crear un archivo de formato no XML
En el siguiente ejemplo se crea un archivo de formato no XML, Currency.fmt, para la tabla Sales.Currency de la base de datos AdventureWorks2008R2. El ejemplo asume que se utiliza la autenticación de Windows y que se tiene una conexión de confianza con la instancia del servidor en la que se ejecuta el comando bcp.
En el símbolo del sistema de Windows, escriba:
bcp AdventureWorks2008R2.Sales.Currency format nul -T -c -f Currency.fmt
Para obtener más información, vea Descripción de los archivos de formato no XML.
H. Crear un archivo de formato XML
El siguiente ejemplo crea un archivo de formato XML con el nombre Currency.xml para la tabla Sales.Currency de la base de datos AdventureWorks2008R2. El ejemplo asume que se utiliza la autenticación de Windows y que se tiene una conexión de confianza con la instancia del servidor en la que se ejecuta el comando bcp.
En el símbolo del sistema de Windows, escriba:
bcp AdventureWorks2008R2.Sales.Currency format nul -T -c -x -f Currency.xml
Nota |
|---|
Para utilizar el modificador -x, debe contar con un cliente bcp 9.0. Para obtener información acerca de cómo usar el cliente bcp 9.0, vea la sección "Comentarios". |
Para obtener más información, vea Descripción de los archivos de formato XML.
I. Usar un archivo de formato para importar de forma masiva con bcp
Para usar un archivo de formato creado anteriormente al importar datos en 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, Currency.dat, en una copia de la tabla Sales.Currency (Sales.Currency2) mediante el archivo de formato creado anteriormente (Currency.xml). El ejemplo asume que se utiliza la autenticación de Windows y que se tiene una conexión de confianza con la instancia del servidor en la que se ejecuta el comando bcp.
En el símbolo del sistema de Windows, escriba:
bcp AdventureWorks2008R2.Sales.Currency2 in Currency.dat -T -f Currency.xml
Nota |
|---|
Los archivos de formato son útiles cuando los campos del archivo de datos difieren 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. |
Los siguientes temas incluyen ejemplos de uso de bcp:
Ejemplos de importación y exportación de forma masiva documentos XML
Mantener valores de identidad al importar datos de forma masiva
Mantener valores NULL o utilizar valores predeterminados durante la importación masiva
Usar un archivo de formato para importar datos de forma masiva
Usar el formato de caracteres para importar o exportar datos
Usar el formato de caracteres Unicode para importar o exportar datos
Usar el formato nativo Unicode para importar o exportar datos
