ayuda bulk insert

david
25 de Agosto del 2005
hola, necesito hacer un bulk insert desde un procedimiento almacenado pero sin cargar los datos de un archivo.
gracias

GabrielSR2004
25 de Agosto del 2005

Yo utilizo BCP


Programa bcp
El programa bcp copia datos entre Microsoft® SQL Server™ y un archivo de datos con el formato especificado por el usuario.

Sintaxis
bcp {[[nombreBaseDatos.][propietario].]{nombreTabla | nombreVista} | "consulta"}
{in | out | queryout | format} archivoDatos
[-m erroresMáx] [-f archivoFormato] [-e archivoErr]
[-F primeraFila] [-L últimaFila] [-b tamañoLote]
[-n] [-c] [-w] [-N] [-6] [-q] [-C páginaCódigos]
[-t termCampo] [-r termFila]
[-i archivoEntrada] [-o archivoSalida] [-a tamañoPaquete]
[-S nombreServidor] [-U IdInicioSesión] [-P contraseña]
[-T] [-v] [-R] [-k] [-E] [-h "sugerencia [,…n]"]

Argumentos
nombreBaseDatos
Es el nombre de la base de datos en la que reside la tabla o la vista especificada. Si no se especifica, es la base de datos predeterminada para el usuario.
propietario
Es el nombre del propietario de la tabla o de la vista. El argumento propietario es opcional si el usuario que realiza la copia masiva es propietario de la tabla o de la vista especificada. Si no se especifica el argumento propietario y el usuario que realiza la copia masiva no es propietario de la tabla o de la vista especificada, Microsoft SQL Server devuelve un mensaje de error y se cancela la operación de copia masiva.
nombreTabla
Es el nombre de la tabla de destino cuando se copian datos en SQL Server (in), y de la tabla de origen cuando se copian datos desde SQL Server (out).
nombreVista
Es el nombre de la vista de destino cuando se copian datos en SQL Server (in), y de la vista de origen cuando se copian datos desde SQL Server (out). Sólo 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 acerca de las restricciones de la copia de datos en las vistas, consulte INSERT.
consulta
Es una consulta Transact-SQL que devuelve un conjunto de resultados. Si la consulta devuelve varios conjuntos de resultados, como una instrucción SELECT que especifica una cláusula COMPUTE, sólo se copiará en el archivo de datos el primer conjunto de resultados; los conjuntos de resultados siguientes se omiten. Utilice comillas dobles para la consulta y comillas simples para cualquier elemento incrustado de la consulta. También debe especificarse queryout al realizar copias de datos masivas desde una consulta.
in | out | queryout | format
Especifica la dirección de la copia masiva. Con la opción in se realiza una copia desde un archivo a la tabla o a la vista de la base de datos. Con la opción out se realiza una copia desde la tabla o desde la vista de la base de datos a un archivo. Sólo se debe especificar queryout al realizar copias de datos masivas desde una consulta. Con la opción format se crea un archivo de formato basado en la opción especificada (-n, -c, -w, -6 o -N) y en los delimitadores de tabla o de la vista. Si se utiliza format, también debe especificarse la opción -f.
archivoDatos
Es la ruta de acceso completa del archivo de datos que se utiliza en la copia masiva de una tabla o de una vista desde, o hacia, un disco. Cuando se realiza una copia de datos masiva en SQL Server, el archivo de datos contiene los datos que deben copiarse en la tabla o en la vista especificada. Cuando se realiza una copia de datos 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.
-m erroresMáx
Especifica el número máximo de errores que pueden producirse antes de que se cancele la operación de copia masiva. Cada fila que no pueda copiarse con el programa bcp se omite y se considera como un error. Si no se incluye esta opción, el valor predeterminado es 10.
-f archivoFormato
Especifica la ruta de acceso del archivo de formato que contiene respuestas guardadas de una utilización previa de bcp con la misma tabla o vista. Utilice esta opción cuando trabaje con un archivo de formato creado con la opción format para hacer una copia de datos masiva de entrada o de salida. La creación del archivo de formato es opcional. Después de pedirle que especifique los aspectos relacionados con el formato, bcp le preguntará si desea guardar las respuestas en un archivo de formato. El nombre predeterminado para el archivo es Bcp.fmt. bcp puede consultar un archivo de formato cuando realice copias de datos masivas; por lo tanto, no es necesario volver a escribir respuestas acerca del formato ya existentes de forma interactiva. Si no se utiliza esta opción y no se especifica -n, -c, -w, -6 o -N, bcp le pide información acerca del formato.
-e archivoErr
Especifica la ruta completa de un archivo de errores que se utiliza para guardar las filas que bcp no puede transferir del archivo a la base de datos. Los mensajes de error de 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 primeraFila
Especifica el número de la primera columna para la copia masiva. El valor predeterminado es 1, que hace referencia a la primera fila del archivo de datos especificado.
-L últimaFila
Especifica el número de la última fila para la copia masiva. El valor predeterminado es 0, que hace referencia a la última fila del archivo de datos especificado.
-b tamañoLote
Especifica el número de filas por lote de datos copiado. Cada lote se copia en el servidor como una transacción. SQL Server confirma o, en caso de error, deshace la transacción para cada lote. De forma predeterminada, todos los datos del archivo de datos especificado se copian en un lote. No utilice esta opción en combinación con -h "ROWS_PER_BATCH = bb".
-n
Realiza la operación de copia masiva con los tipos de datos nativos de la base de datos. Esta opción no efectúa una petición para cada campo, sino que utiliza los valores nativos.
-c
Realiza la operación de copia masiva 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, no necesita prefijos y utiliza t (carácter de tabulador) como separador de campos y n (carácter de nueva línea) como terminador de la fila.
-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, no necesita prefijos y utiliza el carácter t (carácter de tabulador) como separador de campos y n (carácter de nueva línea) como terminador de la línea. No puede utilizarse con SQL Server versión 6.5 ni anteriores.
-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 desde un servidor SQL Server a otro 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 ANSI extendidos y desee aprovechar el rendimiento del modo nativo. No puede utilizarse -N con SQL Server 6.5 ni anteriores.
-6
Realiza la operación de copia masiva con tipos de datos de SQL Server 6.0 ó 6.5. Utilice esta opción en combinación con el formato de carácter (-c) o nativo (-n). Esta opción no realiza una petición para cada campo, sino que utiliza los valores predeterminados. Utilice esta opción cuando los archivos de datos contengan valores con los formatos de SQL Server 6.5, tales como archivos de datos generados por el programa bcp incluido con SQL Server versión 6.5 y anteriores. Por ejemplo, para realizar copias masivas en SQL Server de formatos de fecha admitidos por versiones anteriores del programa bcp (pero que ya no admite ODBC), utilice el parámetro -6.
--------------------------------------------------------------------------------

Importante Cuando realice copias de datos masivas de SQL Server en un archivo de datos, bcp no generará formatos de fecha de SQL Server 6.0 ni 6.5 para ningún dato datetime o smalldatetime aunque se especifique -6. Las fechas siempre se escriben en formato ODBC. Además, los valores NULL se escriben en las columnas bit con el valor 0, porque SQL Server 6.5 y las versiones anteriores no son compatibles con datos bit que acepten valores NULL.


--------------------------------------------------------------------------------

-q
Especifica que son necesarios identificadores entre comillas; por ejemplo, cuando el nombre de la tabla o de la vista contiene caracteres que no son ANSI. Incluya las tres partes del nombre de la tabla o de la vista (que puede contener caracteres especiales incrustados, como espacios) entre comillas dobles (“ “).
-C páginaCódigos
Especifica la página de códigos de los datos del archivo de datos. páginaCódigos sólo es relevante si los datos contienen columnas char, varchar o text con valores de caracteres mayores de 127 o menores de 32.


Valor de página de códigos Descripción
ACP ANSI/Microsoft Windows® (ISO 1252).
OEM Página de códigos predeterminada, utilizada por el cliente. Ésta es la página de códigos que utiliza bcp de forma predeterminada si no se especifica -C.
RAW No se realiza ninguna conversión entre páginas de códigos. Ésta es la opción más rápida porque no se producen conversiones.
<valor> Número específico de una página de códigos, por ejemplo, 850.


-t termCampo
Especifica el terminador del campo. El valor predeterminado es t (carácter de tabulador). Utilice este parámetro para suplantar el terminador de campo predeterminado.
-r termFila
Especifica el terminador de la fila. El valor predeterminado es n (carácter de nueva línea). Utilice este parámetro para suplantar el terminador de fila predeterminado.
-i archivoEntrada
Especifica el nombre de un archivo de respuesta, que contiene las respuestas a las preguntas que aparecen junto al símbolo del sistema para cada campo cuando se realiza una copia masiva en modo interactivo (no se especifican -n, -c, -w, -6 o -N).
-o archivoSalida
Especifica el nombre de un archivo que recibe la salida de bcp redirigida desde el símbolo del sistema.
-a tamañoPaquete
Especifica el número de bytes por paquete de red enviados y recibidos por el servidor. Puede establecerse una opción de configuración del servidor con el Administrador corporativo de SQL Server (o con el procedimiento almacenado del sistema sp_configure). No obstante, las opciones de configuración de servidor pueden suplantarse individualmente mediante esta opción. tamañoPaquete 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 pide un tamaño de paquete mayor, pero no puede concederse, se utiliza el valor predeterminado. Las estadísticas de rendimiento generadas por bcp muestran el tamaño del paquete utilizado.

-S nombreServidor
Especifica el servidor SQL Server con el que debe establecerse la conexión. nombreServidor es el nombre del servidor en la red. De forma predeterminada, es el servidor local en el que se ejecuta SQL Server (ningún nombre de servidor). Esta opción es necesaria cuando se ejecute bcp desde un equipo remoto conectado a la red.
-U IdInicioSesión
Especifica el identificador de inicio de sesión utilizado para conectar con SQL Server.
-P contraseña
Especifica la contraseña para el identificador de inicio de sesión. Si no se utiliza esta opción, bcp le pide 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).
-T
Especifica que bcp se conectará a SQL Server con una conexión de confianza, mediante las credenciales de seguridad del usuario de la red. Los parámetros IdInicioSesión y contraseña no son obligatorios.
-v
Facilita información acerca del número de versión del programa bcp y de los derechos de autor.
-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 de copia masiva, en vez de tener valores predeterminados para las columnas insertadas.
-E
Especifica que los valores de una columna de identidad están presentes en el archivo que se importa. 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. Si el archivo de datos no contiene valores para la columna de identidad de la tabla o de la vista, utilice un archivo de formato para especificar que se debe omitir la columna de identidad de la tabla o de la vista al importar los datos; SQL Server asignará automáticamente valores exclusivos para la columna. Para obtener más información, consulte DBCC CHECKIDENT.
-h "sugerencia [,…n]"
Especifica las sugerencias que deben utilizarse durante una copia de datos masiva en una tabla o en una vista. No se puede utilizar esta opción cuando se realicen copias de datos masivas en SQL Server 6.x ni en versiones anteriores.


Sugerencia Descripción
ORDER (columna [ASC | DESC] [,…n]) Orden de los datos en el archivo de datos. El rendimiento de la copia masiva mejora si los datos cargados se ordenan según el índice agrupado de la tabla. Si el archivo de datos se almacena en un orden distinto, o si no hay índice agrupado en la tabla, se pasará por alto la sugerencia ORDER. Los nombres de columna facilitados deben ser columnas válidas en la tabla de destino. De forma predeterminada, bcp supone que el archivo de datos no está ordenado.
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 se envía el archivo de datos completo al servidor en una sola transacción. El servidor optimiza la carga de la copia masiva según el valor bb. De forma predeterminada, el valor de ROWS_PER_BATCH es desconocido.
KILOBYTES_PER_BATCH = cc Número aproximado de kilobytes (KB) de datos por lote (igual a cc). De forma predeterminada, el valor de KILOBYTES_PER_BATCH es desconocido.
TABLOCK Se obtiene un bloqueo en la tabla durante la operación de copia masiva. Esta sugerencia mejora notablemente el rendimiento, dado que, al mantenerse el bloqueo únicamente durante la operación de copia masiva, se reduce la contención en la tabla por bloqueo. Una tabla puede ser cargada simultáneamente por varios clientes si no tiene índices y se especifica TABLOCK. De forma predeterminada, el comportamiento del bloqueo viene determinado por la opción de tabla table lock on bulk load.
CHECK_CONSTRAINTS Durante la operación de copia masiva, se comprueba la existencia de restricciones en la tabla de destino. De forma predeterminada, las restricciones se pasan por alto.


Observaciones
Se omiten los valores del archivo de datos que se importa para las columnas calculadas o timestamp, 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 se deben pasar por alto las columnas calculadas o timestamp de la tabla al importar los datos; SQL Server asigna automáticamente valores para la columna.

Se realiza una copia masiva de las columnas calculadas y timestamp desde SQL a un archivo de datos en la forma habitual.

Los identificadores de SQL Server (nombres de bases de datos, nombres de tablas o de vistas, contraseñas y nombres de inicio de sesión) pueden incluir caracteres tales como comillas y espacios incrustados. Cuando especifique en el símbolo del sistema un identificador que incluya un espacio o comillas, coloque el identificador entre dobles comillas (“ “). Para los nombres de tablas o de vistas que contengan comillas o espacios incrustados, especifique también el parámetro -q. Por ejemplo, para realizar una copia masiva del archivo Authors.txt en la tabla my table de la base de datos pubs copy, con el nombre de inicio de sesión my name y la contraseña my pass, ejecute:

bcp "pubs copy..my table" in authors.txt -c -q -Sserver_name -U"my name" -P"my pass"





Atte
----------------------------------------------
[email protected]
México
Gabriel Sanchez