bcp_control
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
dbc
Es el identificador de la conexión ODBC habilitado para la copia masiva.eOption
Es uno de los siguientes valores:BCPABORT
Detiene una operación de copia masiva que ya está en curso. Para detener una operación de copia masiva en ejecución, llame a bcp_control desde otro subproceso con eOption establecido en BCPABORT. 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 los datos, o todas las filas del archivo de datos del usuario, cuando los datos se copian en SQL Server. Un valor inferior a 1 establece BCPBATCH al valor predeterminado.BCPFILECP
iValue incluye 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 están 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 están 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), 90 (SQL Server 2005), o 100 (SQL Server 2008 o SQL Server 2008 R2). El valor predeterminado es 100. 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 de un servidor SQL Server 2000 a una columna varchar(max) de un servidor SQL Server 2005 o posterior, debe especificar 80. Del mismo modo, si especifica 80 al exportar los datos de una columna varchar(max), éstos se guardarán de la misma forma que las columnas de texto se guardan en formato SQL Server 2000 y podrán importarse en una columna de texto de un servidor SQL Server 2000.BCPFIRST
Es la primera fila de datos del archivo o la tabla que va a copiarse. El valor predeterminado es 1; un valor inferior a 1 restablece 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 va a copiarse 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 número 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 con formato XML solamente se admiten cuando SQL Server se instala junto con SQL Server Native Client.
BCPHINTS
iValue contiene un puntero a una cadena de caracteres SQLTCHAR. La cadena direccionada especifica sugerencias de procesamiento de copia masiva de SQL Server o 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 acerca de las sugerencias de procesamiento de copia masiva, vea Utilidad bcp.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 convierten 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 de 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 va a copiarse 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 número entero de 64 bits con signo que contiene el valor. El valor máximo que puede pasarse 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 inferior a 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 superior a 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 la secuencia de escape de marca de tiempo de ODBC. La opción BCPODBC solo se aplica a BCP_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 afectadas por la operación actual o por la última operación 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 del argumento eOption especificado. iValue es una conversión del valor entero (LONGLONG) en un puntero void para permitir la ampliación futura a valores de 64 bits.
Devuelve
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 utiliza para especificar la instrucción SELECT cuando la copia masiva del conjunto de resultados de una instrucción SELECT no se realiza desde SQL Server. Establezca eOption en BCPHINTS y establezca iValue para que incluya un puntero a una cadena SQLTCHAR que contenga la instrucción SELECT.
Estos parámetros de control solo son significativos cuando la copia se realiza entre un archivo de usuario y una tabla de SQL Server. La configuración de los parámetros de control no tiene ningún efecto sobre 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);