bcp_control
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Cambia la configuración predeterminada de varios parámetros de control para una copia masiva entre un archivo y SQL Server.
Sintaxis
RETCODE bcp_control (
HDBC hdbc,
INT eOption,
void* iValue);
Argumentos
hdbc
Es el identificador de la conexión ODBC habilitada para la copia masiva.
eOption
Es uno de los siguientes valores:
BCPABORT
Detiene una operación de copia masiva que ya está en curso. Llame a bcp_control con una eOption de BCPABORT desde otro subproceso para detener una operación de copia masiva en ejecución. Se omite el parámetro iValue .
BCPBATCH
Es el número de filas por lote. El valor predeterminado es 0, que indica todas las filas de una tabla, cuando se extraen datos o todas las filas del archivo de datos de usuario, cuando los datos se copian en sql Server. Un valor inferior a 1 restablece el valor predeterminado para BCPBATCH.
BCPDELAYREADFMT
Un valor booleano, si se establece en true, hará que bcp_readfmt leer en la ejecución. Si es false (valor predeterminado), bcp_readfmt leerá inmediatamente el archivo de formato. Se producirá un error de secuencia si BCPDELAYREADFMT es true y llama a bcp_columns o bcp_setcolfmt.
También se producirá un error de secuencia si llama a bcp_control(hdbc,
BCPDELAYREADFMT, (void *)FALSE)
después de llamar a bcp_control(hdbc,
BCPDELAYREADFMT, (void *)TRUE)
y bcp_writefmt.
Para obtener más información, vea Detección de metadatos.
BCPFILECP
iValue contiene el número de la página de códigos del archivo de datos. Puede especificar el número de la página de códigos, como 1252 o 850, o uno de estos valores:
BCPFILE_ACP: los datos del archivo se encuentra en la página de códigos de Microsoft Windows del cliente.
BCPFILE_OEMCP: los datos del archivo están en la página de códigos OEM del cliente (valor predeterminado).
BCPFILE_RAW: los datos del archivo se encuentra en la página de códigos de SQL Server.
BCPFILEFMT
Número de versión del formato de archivo de datos. Puede ser 80 ( SQL Server 2000 (8.x)), 90 ( SQL Server 2005 (9.x)), 100 ( SQL Server 2008 (10.0.x) o SQL Server 2008 R2 (10.50.x)), 110 ( SQL Server 2012 (11.x)) o 120 ( SQL Server 2014 (12.x)). 120 es el valor predeterminado. Esto resulta útil para exportar e importar datos en formatos admitidos en versiones anteriores del servidor. Por ejemplo, para importar datos obtenidos de una columna de texto en un servidor de SQL Server 2000 (8.x) en una columna varchar(max) de sql Server 2005 (9.x) o un servidor posterior, debe especificar 80. Del mismo modo, si especifica 80 al exportar datos desde una columna varchar(max), se guardará igual que las columnas de texto en el formato SQL Server 2000 (8.x) y se puede importar en una columna de texto de un servidor de SQL Server 2000 (8.x).
BCPFIRST
Es la primera fila de datos del archivo o la tabla que va a copiarse. El valor predeterminado es 1; un valor menor que 1 reinicializa esta opción a su valor predeterminado.
BCPFIRSTEX
En operaciones de salida de BCP, especifica la primera fila de la tabla de base de datos que se copia en el archivo de datos.
En operaciones de entrada de BCP, especifica la primera fila del archivo de datos que se copia en la tabla de base de datos.
Se espera que el parámetro iValue sea la dirección de un entero de 64 bits con signo que contiene el valor . El valor máximo que puede pasarse a BCPFIRSTEX es 2^63-1.
BCPFMTXML
Especifica que el archivo de formato generado debe estar en formato XML. Está desactivado de forma predeterminada.
Los archivos con formato XML proporcionan mayor flexibilidad, pero con algunas restricciones más. Por ejemplo, no es posible especificar el prefijo ni el terminador de un campo de forma simultánea, lo que era posible en archivos de formatos anteriores.
Nota:
Los archivos de formato XML solo se admiten cuando SQL Server está instalado junto con SQL Server Native Client.
BCPHINTS
iValue contiene un puntero de cadena de caracteres SQLTCHAR. La cadena a la que apunta especifica, bien sugerencias de procesamiento de copia masiva de SQL Server, bien una instrucción Transact-SQL que devuelve un conjunto de resultados. Si se especifica una instrucción Transact-SQL que devuelve más de un conjunto de resultados, se omiten todos los conjuntos de resultados posteriores al primero. Para obtener más información sobre las sugerencias de procesamiento de copia masiva, vea bcp Utility.
BCPKEEPIDENTITY
Cuando iValue es TRUE, especifica que las funciones de copia masiva insertan valores de datos proporcionados para las columnas de SQL Server definidas con una restricción de identidad. El archivo de entrada debe proporcionar valores para las columnas de identidad. Si no se establece, se generan nuevos valores de identidad para las filas insertadas. No se tiene en cuenta ningún dato presente en el archivo para las columnas de identidad.
BCPKEEPNULLS
Especifica si los valores de datos vacíos del archivo se convertirán en valores NULL en la tabla de SQL Server. Cuando iValue es TRUE, los valores vacíos se convertirán en NULL en la tabla de SQL Server. Con el valor predeterminado, los valores vacíos se convierten en un valor predeterminado para la columna en la tabla de SQL Server si existe un valor predeterminado.
BCPLAST
Es la última fila que va a copiarse. Con el valor predeterminado se copian todas las filas; un valor inferior a 1 restablece esta opción a su valor predeterminado.
BCPLASTEX
En operaciones de salida de BCP, especifica la última fila de la tabla de base de datos que se copia en el archivo de datos.
En operaciones de entrada de BCP, especifica la última fila del archivo de datos que se copia en la tabla de base de datos.
Se espera que el parámetro iValue sea la dirección de un entero de 64 bits con signo que contiene el valor . El valor máximo que se puede pasar a BCPLASTEX es 2^63-1.
BCPMAXERRS
Es el número de errores permitido antes de que la operación de copia masiva genere un error. El valor predeterminado es 10; un valor menor que 1 restablece esta opción a su valor predeterminado. La copia masiva impone un máximo de 65.535 errores. Si se intenta establecer esta opción en un valor mayor que 65.535, la opción se establece en 65.535.
BCPODBC
Cuando es TRUE, especifica que los valores datetime y smalldatetime guardados en formato de caracteres usarán el prefijo y el sufijo de secuencia de escape de marca de tiempo ODBC. La opción BCPODBC solo se aplica a DB_OUT.
Cuando es FALSE, un valor datetime que representa el 1 de enero de 1997 se convierte en la cadena de caracteres: 1997-01-01 00:00:00.000. Cuando es TRUE, el mismo valor datetime se representa como: {ts '1997-01-01 00:00:00.000'}.
BCPROWCOUNT
Devuelve el número de filas afectado por la operación actual (o última) de BCP.
BCPTEXTFILE
Cuando es TRUE, especifica que el archivo de datos es un archivo de texto, en lugar de un archivo binario. Si el archivo es un archivo de texto, BCP determina si es Unicode o no comprobando el marcador de bytes Unicode de los dos primeros bytes del archivo de datos.
BCPUNICODEFILE
Cuando es TRUE, especifica que el archivo de entrada es un archivo Unicode.
iValue
Es el valor de la eOption especificada. iValue es un valor entero (LONGLONG) convertido a un puntero void para permitir la expansión futura a valores de 64 bits.
Devoluciones
SUCCEED o FAIL.
Comentarios
Esta función establece varios parámetros de control para operaciones de copia masiva, incluido el número de errores permitidos antes de cancelar una copia masiva, los números de la primera y la última fila que van a copiarse de un archivo de datos y el tamaño del lote.
Esta función también se usa para especificar la instrucción SELECT al copiar de forma masiva desde SQL Server el conjunto de resultados de una instrucción SELECT. Establezca eOption en BCPHINTS y establezca iValue para que tenga un puntero a una cadena SQLTCHAR que contenga la instrucción SELECT.
Estos parámetros de control solo son significativos al copiar entre un archivo de usuario y una tabla de SQL Server. La configuración del parámetro de control no tiene ningún efecto en las filas copiadas en SQL Server con bcp_sendrow.
Ejemplo
// Variables like henv not specified.
SQLHDBC hdbc;
DBINT nRowsProcessed;
// Application initiation, get an ODBC environment handle, allocate the
// hdbc, and so on.
...
// Enable bulk copy prior to connecting on allocated hdbc.
SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP, (SQLPOINTER) SQL_BCP_ON,
SQL_IS_INTEGER);
// Connect to the data source, return on error.
if (!SQL_SUCCEEDED(SQLConnect(hdbc, _T("myDSN"), SQL_NTS,
_T("myUser"), SQL_NTS, _T("myPwd"), SQL_NTS)))
{
// Raise error and return.
return;
}
// Initialize bulk copy.
if (bcp_init(hdbc, _T("address"), _T("address.add"), _T("addr.err"),
DB_IN) == FAIL)
{
// Raise error and return.
return;
}
// Set the number of rows per batch.
if (bcp_control(hdbc, BCPBATCH, (void*) 1000) == FAIL)
{
// Raise error and return.
return;
}
// Set file column count.
if (bcp_columns(hdbc, 1) == FAIL)
{
// Raise error and return.
return;
}
// Set the file format.
if (bcp_colfmt(hdbc, 1, 0, 0, SQL_VARLEN_DATA, '\n', 1, 1)
== FAIL)
{
// Raise error and return.
return;
}
// Execute the bulk copy.
if (bcp_exec(hdbc, &nRowsProcessed) == FAIL)
{
// Raise error and return.
return;
}
printf_s("%ld rows processed by bulk copy.", nRowsProcessed);