Documente Academic
Documente Profesional
Documente Cultură
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.
Sintaxis
bcp {[[database_name.][schema].]{table_name | view_name} | "query"}
{in | out | queryout | format} data_file
[-m max_errors] [-f format_file] [-x] [-e err_file]
[-F first_row] [-L last_row] [-b batch_size]
[-n] [-c] [-N] [-w] [-V (70 | 80 | 90 )]
[-q] [-C { ACP | OEM | RAW | code_page } ] [-t field_term]
[-r row_term] [-i input_file] [-o output_file] [-a packet_size]
[-S server_name[\instance_name]] [-U login_id] [-P password]
[-T] [-v] [-R] [-k] [-E] [-h"hint [,...n]"]
Argumentos
database_name
Es el nombre de la base de datos en la que reside la tabla o vista especificada. Si no se
especifica, es la base de datos predeterminada para el usuario.
owner
Es el nombre del propietario de la tabla o vista. El argumento owner es opcional si el usuario
que realiza la operación es propietario de la tabla o vista especificada. Si no se especifica owner
y el usuario que realiza la acción no es el propietario de la tabla o la vista especificada, SQL
Server devuelve un mensaje de error y se cancela la operación.
table_name
Es el nombre de la tabla de destino cuando se importan datos en SQL Server (in), y la tabla de
origen cuando se exportan datos de SQL Server (out).
view_name
Es el nombre de la vista de destino cuando se copian datos en SQL Server (in), y la vista de
origen cuando se copian datos de SQL Server (out). Solamente pueden utilizarse como vistas
de destino aquellas vistas en las que todas las columnas hacen referencia a la misma tabla.
Para obtener más información sobre las restricciones para copiar datos en vistas, vea INSERT
(Transact-SQL).
La consulta puede hacer referencia a un procedimiento almacenado siempre que todas las
tablas a las que se haga referencia dentro del procedimiento almacenado existan antes de
ejecutar la instrucción bcp. Por ejemplo, si el procedimiento almacenado genera una tabla
temporal, se produce un error en la instrucción bcp porque la tabla temporal solamente está
disponible en tiempo de ejecución y no cuando se ejecuta la instrucción. En este caso,
considere insertar los resultados del procedimiento almacenado en una tabla y, a continuación,
usar bcp para copiar los datos de la tabla en un archivo de datos.
data_file
Es la ruta completa del archivo de datos. Cuando se importan datos de forma masiva a SQL
Server, el archivo de datos contiene los datos que se van a copiar en la tabla o vista
especificada. Cuando se realiza una exportación de datos de forma masiva desde SQL Server, el
archivo de datos contiene los datos copiados desde la tabla o desde la vista. La ruta de acceso
puede contener de 1 a 255 caracteres. El archivo de datos puede contener 263 - 1 filas, como
máximo.
Importante:
Para la opción format, debe especificar nul como valor de data_file (format nul).
-m max_errors
Especifica el número máximo de errores de sintaxis que pueden producirse antes de que se
cancele la operación de bcp. Un error de sintaxis implica un error de conversión de datos en el
tipo de datos de destino. El total max_errors excluye cualquier error que pueda detectarse
solamente en el servidor, como la infracción de restricciones.
Una fila que no puede copiar la utilidad bcp se omite y se cuenta como un error. Si no se
incluye esta opción, el valor predeterminado es 10.
Nota:
existente.
Nota:
Nota:
Para utilizar el modificador -x, debe contar con un cliente bcp 10.0. Para obtener información
acerca de cómo usar el cliente bcp 10.0, vea la sección "Notas" más adelante en este tema.
-e err_file
Especifica la ruta completa de un archivo de error que se utiliza para almacenar filas que la
utilidad bcp no puede transferir del archivo a la base de datos. Los mensajes de error del
comando bcp van a la estación de trabajo del usuario. Si no se utiliza esta opción, no se creará
el archivo de errores.
-F first_row
Especifica el número de la primera fila que se exportará desde una tabla o que se importará
desde un archivo de datos. Este parámetro requiere un valor superior a (>) 0 pero inferior a
(<) o igual que (=) el número total de filas. En ausencia de este parámetro, el valor
predeterminado es la primera fila del archivo.
first_row puede ser un valor entero positivo menor o igual que 2^63-1. -F first_row está en
base 1.
-L last_row
Especifica el número de la última fila que se exportará desde una tabla o que se importará
desde un archivo de datos. Este parámetro requiere un valor superior a (>) 0 pero inferior a
(<) o igual al (=) el número de la última fila. En ausencia de este parámetro, el valor
predeterminado es la última fila del archivo.
last_row puede ser un valor entero positivo menor o igual que 2^63-1.
-b batch_size
Especifica el número de filas por lote de datos importados. Cada lote se importa y registra como
una transacción aparte que importa el lote entero antes de confirmarse. De forma
predeterminada, todas las filas del archivo de datos se importan en un solo lote. Para distribuir
las filas en varios lotes, especifique un valor de batch_size inferior al número de filas del
archivo de datos. Si se produce un error en la transacción de un lote, solamente se revierten las
inserciones del lote actual. Los lotes importados por transacciones confirmadas no se ven
afectados por errores posteriores.
Para obtener más información, vea Administrar lotes para la importación masiva.
-n
Realiza la operación de copia masiva con los tipos de datos nativos (base de datos) de los
datos. Esta opción no efectúa una petición para cada campo, sino que utiliza los valores
nativos.
Para obtener más información, vea Usar el formato nativo para importar o exportar datos.
-c
Realiza la operación con un tipo de datos de carácter. Esta opción no realiza una petición para
cada campo; utiliza char como tipo de almacenamiento, sin prefijos y con \t (carácter de
tabulador) como separador de campos y \r\n (carácter de nueva línea) como terminador de
filas.
Para obtener más información, vea Usar el formato de caracteres para importar o exportar
datos.
-N
Realiza la operación de copia masiva con los tipos de datos nativos (de la base de datos) para
datos que no sean de caracteres, y con datos Unicode para los datos de caracteres. Esta opción
es una alternativa de mayor rendimiento que la opción -w y tiene como objeto la transferencia
de datos de una instancia de SQL Server a otra mediante un archivo de datos. No realiza una
petición para cada campo. Utilice esta opción cuando vaya a transferir datos que contengan
caracteres extendidos ANSI y desee aprovechar el rendimiento del modo nativo.
Para obtener más información, vea Usar el formato nativo Unicode para importar o exportar
datos.
-w
Realiza la operación de copia masiva con caracteres Unicode. Esta opción no realiza una
petición para cada campo; utiliza nchar como tipo de almacenamiento, sin prefijos, con \t
(carácter de tabulador) como separador de campos y \n (carácter de nueva línea) como
terminador de filas.
Para obtener más información, vea Usar el formato de caracteres Unicode para importar o
exportar datos.
-V (70 | 80 | 90 )
Realiza la operación de copia masiva con tipos de datos de versiones anteriores de SQL Server.
Esta opción no realiza una petición para cada campo, sino que utiliza los valores
predeterminados.
Por ejemplo, para generar datos para tipos no compatibles con SQL Server 7.0, pero que se
introdujeron en versiones posteriores de SQL Server (por ejemplo, bigint, sql_variant y xml),
use la opción -V70.
Para obtener más información, vea Importar datos con formato nativo y de caracteres de
versiones anteriores de SQL Server.
-q
Ejecuta la instrucción SET QUOTED_IDENTIFIERS ON en la conexión entre la utilidad bcp y una
instancia de SQL Server. Utilice esta opción para especificar una base de datos, un propietario,
una tabla o un nombre de vista que contenga un espacio o una comilla simple. Englobe la
totalidad del nombre de tres partes de la vista o tabla entre comillas (" ").
Para especificar un nombre de base de datos que contenga un espacio o una comilla simple,
debe utilizar la opción –q.
Para obtener más información, vea Notas más adelante en este tema.
Nota:
Valor de página
de códigos Descripción
Para obtener más información, vea Copiar datos entre distintas intercalaciones.
-t field_term
Especifica el terminador del campo. El valor predeterminado es \t (carácter de tabulador).
Utilice este parámetro para invalidar el terminador de campo predeterminado. Para obtener
más información, vea Especificar terminadores de campo y de fila.
-r row_term
Especifica el terminador de la fila. El valor predeterminado es \n (carácter de nueva línea).
Utilice este parámetro para invalidar el terminador de fila predeterminado. Para obtener más
información, vea Especificar terminadores de campo y de fila.
-i input_file
Especifica el nombre de un archivo de respuestas, que contiene respuestas a las preguntas del
símbolo del sistema para cada campo de datos cuando se realiza una copia masiva utilizando el
modo interactivo (cuando no se especifica -n, -c, -w o -N).
-o output_file
Especifica el nombre de un archivo que recibe la salida redirigida desde el símbolo del sistema.
-a packet_size
Especifica el número de bytes por paquete de red enviados y recibidos por el servidor. Es
posible establecer una opción de configuración de servidor mediante SQL Server Management
Studio (o el procedimiento almacenado del sistema sp_configure). No obstante, la opción de
configuración de servidor se puede invalidar individualmente mediante esta opción. packet_size
acepta valores de 4.096 a 65.535 bytes; el valor predeterminado es 4.096.
Un tamaño mayor de los paquetes puede mejorar el rendimiento de las operaciones de copia
masiva. Si se solicita un tamaño de paquete mayor pero no puede concederse, se utiliza el
valor predeterminado. Las estadísticas de rendimiento generadas por la utilidad bcp muestran
el tamaño del paquete utilizado.
-S server_name[ \instance_name]
Especifica la instancia de SQL Server a la que hay que conectarse. Si no se especifica ningún
servidor, la utilidad bcp se conecta a la instancia predeterminada de SQL Server en el equipo
local. Esta opción es necesaria cuando se ejecuta un comando bcp desde un equipo remoto de
la red o desde una instancia local con nombre. Para establecer una conexión con la instancia
predeterminada de SQL Server en un servidor, especifique únicamente server_name. Para
conectarse a una instancia con nombre de SQL Server, especifique
server_name\instance_name.
-U login_id
Especifica el identificador de inicio de sesión para conectar con SQL Server.
Nota de seguridad:
Cuando la utilidad bcp se conecta con SQL Server mediante una conexión de confianza que
utiliza seguridad integrada, utilice la opción -T (conexión de confianza) en lugar de la
combinación user name y password.
-P password
Especifica la contraseña para el identificador de inicio de sesión. Si no se utiliza esta opción, el
comando bcp solicitará una contraseña. Si se utiliza esta opción al final del símbolo del sistema
sin especificar ninguna contraseña, bcp utiliza la contraseña predeterminada (NULL).
Nota de seguridad:
-T
Especifica que la utilidad bcp se conecte a SQL Server mediante una conexión de confianza
usando la seguridad integrada. No es necesario usar credenciales de seguridad del usuario de la
red, login_id ni password. Si no se especifica –T, tiene que especificar –U y –P para iniciar
sesión correctamente.
-v
Facilita información acerca del número de versión y de los derechos de autor de la utilidad bcp.
-R
Especifica que se realice la copia masiva de datos de moneda, fecha y hora en SQL Server con
el formato regional definido para la configuración regional del equipo cliente. De forma
predeterminada, la configuración regional se omite.
-k
Especifica que las columnas vacías deben conservar un valor NULL durante la operación, en vez
de tener valores predeterminados para las columnas insertadas. Para obtener más información,
vea Mantener valores NULL o utilizar valores predeterminados durante la importación masiva.
-E
Especifica que se utilizará el valor o valores de identidad del archivo de datos importado para la
columna de identidad. Si no se especifica -E, se omiten los valores de identidad de esta
columna en el archivo de datos que se importa y SQL Server asigna automáticamente valores
únicos basados en los valores de inicialización y de incremento especificados durante la
creación de la tabla.
La opción -E tiene un requisito de permisos especial. Para obtener más información, vea
"Notas" más adelante en este tema.
Para obtener más información acerca de cómo mantener los valores de identidad, vea Mantener
valores de identidad al importar datos de forma masiva.
Para obtener más información, vea Controlar el criterio de ordenación en las importaciones
masivas de datos.
ROWS_PER_BATCH = bb
Número de filas de datos por lote (igual a bb). Se utiliza cuando no se especifica -b, con lo que
el archivo de datos completo se envía al servidor en una sola transacción. El servidor optimiza
la carga masiva según el valor bb. De forma predeterminada, el valor de ROWS_PER_BATCH es
desconocido.
Para obtener más información, vea Administrar lotes para la importación masiva.
KILOBYTES_PER_BATCH = cc
Número aproximado de kilobytes (KB) de datos por lote (igual que cc). De forma
predeterminada, el valor de KILOBYTES_PER_BATCH es desconocido.
Para obtener más información, vea Administrar lotes para la importación masiva.
TABLOCK
Especifica que se adquiera un bloqueo de tabla de actualización masiva para la duración de la
operación de carga masiva; de lo contrario, se adquiere un bloqueo de fila. Esta sugerencia
mejora notablemente el rendimiento, dado que, al mantenerse el bloqueo durante la operación
de copia masiva, se reduce la contención en la tabla por bloqueo. Varios clientes pueden cargar
una tabla simultáneamente si ésta no tiene índices y se especifica TABLOCK. De forma
predeterminada, el comportamiento del bloqueo viene determinado por la opción
table lock on bulk load.
Para obtener más información, vea Controlar el comportamiento de bloqueo para la importación
masiva.
CHECK_CONSTRAINTS
Especifica que deben comprobarse todas las restricciones de la tabla o vista de destino durante
la operación de importación masiva. Sin la sugerencia CHECK_CONSTRAINTS, se omiten las
restricciones CHECK y FOREIGN KEY y, después de la operación, la restricción sobre la tabla se
marca como de no confianza.
Nota:
Una situación en la que quizá desee que las restricciones estén deshabilitadas (comportamiento
predeterminado) se produce cuando los datos de entrada contienen filas que infringen las
restricciones. Con las restricciones CHECK deshabilitadas, puede importar los datos y después
usar instrucciones de Transact-SQL para quitar los datos que no sean válidos.
Nota:
bcp ahora aplica una validación y comprobación de los datos que podría dar lugar a errores en
los scripts si se ejecutan en datos no válidos de un archivo de datos.
Nota:
FIRE_TRIGGERS
Especificado con el argumento in, se ejecutarán todos los desencadenadores de inserción
definidos en la tabla de destino durante la operación de copia masiva. Si no se especifica
FIRE_TRIGGERS, no se ejecutará ningún desencadenador. FIRE_TRIGGERS se ignora con los
argumentos out, queryout y format.
Para obtener más información, vea Controlar la ejecución de desencadenadores al importar
datos masivamente.
Notas
El cliente bcp 10.0 se instala cuando se instalan herramientas de Microsoft SQL Server 2008 en el
sistema. Si se instalan herramientas tanto para SQL Server 2008 como para una versión anterior de SQL
Server, según el valor de la variable de entorno PATH, es posible utilice 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.
Las columnas calculadas y timestamp se copian de forma masiva desde SQL Server en un archivo de
datos de la forma habitual.
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:
Copiar código
la opción -q.
• Para los nombres de vista, tabla o propietario que contienen espacios incrustados o comillas,
• Incluir el nombre de vista, tabla o propietario entre corchetes ([]) dentro de las
comillas.
Validar datos
bcp ahora aplica una validación y comprobación de los datos que podría dar lugar a errores en los
scripts si se ejecutan en datos no válidos de un archivo de datos. Por ejemplo, bcp ahora comprueba
que:
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.
SQLNCHAR o Los datos se envían como datos Unicode. Tiene el mismo efecto que
SQLNVARCHAR especificar el modificador -w sin indicar un archivo de formato.
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:
Nota:
Nota:
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.
Ejemplos
Esta sección contiene los siguientes ejemplos:
Copiar código
bcp AdventureWorks.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 AdventureWorks.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 se utiliza la autenticación de modo mixto; se debe utilizar el modificador -U
para especificar el 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.
Copiar código
bcp AdventureWorks.Sales.Currency out Currency.dat -c -U<login_id>
-S<server_name\instance_name>
El sistema le solicitará la contraseña.
Copiar código
USE AdventureWorks;
GO
SELECT * INTO AdventureWorks.Sales.Currency2
FROM AdventureWorks.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:
Copiar código
bcp AdventureWorks.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:
Copiar código
USE AdventureWorks;
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. En el ejemplo
se supone 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.
Copiar código
bcp "SELECT Name FROM AdventureWorks.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
AdventureWorks.Person.Contact en un archivo de datos (Jarrod Rana.dat). En el
ejemplo se supone 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.
Copiar código
bcp "SELECT FirstName, LastName FROM AdventureWorks.Person.Contact
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 AdventureWorks. En el ejemplo se supone 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.
Copiar código
bcp AdventureWorks.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.
Copiar código
bcp AdventureWorks.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 "Notas".
Para obtener más información, vea Descripción de los archivos de formato XML.
Copiar código
bcp AdventureWorks.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.