Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La función bcp_setcolfmt reemplaza al bcp_colfmt. Al especificar la intercalación de columna, se debe usar la función bcp_setcolfmt . bcp_setbulkmode se puede usar para especificar más de un formato de columna.
Esta función proporciona un enfoque flexible para especificar el formato de columna en una operación de copia masiva. Se usa para establecer atributos de formato de columna individuales. Cada llamada a bcp_setcolfmt establece un atributo de formato de columna.
La función bcp_setcolfmt especifica el formato de origen o destino de los datos en un archivo de usuario. Cuando se usa como formato de origen, bcp_setcolfmt especifica el formato de un archivo de datos existente que se usa como origen de datos en una copia masiva en una tabla de SQL Server. Cuando se usa como formato de destino, el archivo de datos se crea con los formatos de columna especificados con bcp_setcolfmt.
Sintaxis
RETCODE bcp_setcolfmt (
HDBC
hdbc
,
INT
field
,
INT
property
,
void*
pValue
,
INT
cbValue
);
Argumentos
hdbc
Es el identificador de la conexión ODBC habilitada para la copia masiva.
campo
Es el número de columna ordinal para el que se establece la propiedad.
propiedad
Es una de las constantes de propiedad. Las constantes de propiedad se definen en esta tabla.
| Propiedad | Importancia | Descripción |
|---|---|---|
| BCP_FMT_TYPE | BYTE | Es el tipo de datos de esta columna en el archivo de usuario. Si es diferente del tipo de datos de la columna correspondiente de la tabla de base de datos, la copia masiva convierte los datos si es posible. El parámetro BCP_FMT_TYPE se enumera mediante los tokens de tipo de datos de SQL Server en sqlncli.h, en lugar de los enumeradores de tipo de datos ODBC C. Por ejemplo, puede especificar una cadena de caracteres, un tipo ODBC SQL_C_CHAR, mediante el tipo SQLCHARACTER específico de SQL Server. Para especificar la representación de datos predeterminada para el tipo de datos de SQL Server, establezca este parámetro en 0. Para una copia masiva de SQL Server en un archivo, cuando BCP_FMT_TYPE es SQLDECIMAL o SQLNUMERIC: - Si la columna de origen no es decimal o numérica, se usan la precisión y la escala predeterminadas. - Si la columna de origen es decimal o numérica, se usa la precisión y la escala de la columna de origen. |
| BCP_FMT_INDICATOR_LEN | INT | Es la longitud en bytes del indicador (prefijo). Es la longitud, en bytes, de un indicador length/null dentro de los datos de columna. Los valores válidos de longitud del indicador son 0 (cuando no se usa ningún indicador), 1, 2 o 4. Para especificar el uso predeterminado del indicador de copia masiva, establezca este parámetro en SQL_VARLEN_DATA. Los indicadores aparecen en memoria directamente antes de cualquier dato y en el archivo de datos directamente antes de los datos a los que se aplican. Si se usa más de un medio para especificar una longitud de columna de archivo de datos (como un indicador y una longitud máxima de columna, o un indicador y una secuencia de terminador), la copia masiva elige la que da como resultado la menor cantidad de datos que se copian. Los archivos de datos generados por copia masiva cuando ninguna intervención del usuario ajusta el formato de los datos contienen indicadores cuando los datos de columna pueden variar en longitud o la columna puede aceptar NULL como valor. |
| BCP_FMT_DATA_LEN | DBINT | Es la longitud en bytes de los datos (longitud de columna) Es la longitud máxima, en bytes, de los datos de esta columna en el archivo de usuario, sin incluir la longitud de ningún indicador o terminador de longitud. Establecer BCP_FMT_DATA_LEN en SQL_NULL_DATA indica que todos los valores de la columna del archivo de datos son o deben establecerse en NULL. Establecer BCP_FMT_DATA_LEN en SQL_VARLEN_DATA indica que el sistema debe determinar la longitud de los datos de cada columna. En algunas columnas, esto podría significar que se genera un indicador de longitud/null para preceder a los datos de una copia de SQL Server o que el indicador se espera en los datos copiados en SQL Server. En el caso de los tipos de datos binarios y caracteres de SQL Server, BCP_FMT_DATA_LEN se pueden SQL_VARLEN_DATA, SQL_NULL_DATA, 0 o algún valor positivo. Si BCP_FMT_DATA_LEN es SQL_VARLEN_DATA, el sistema usa el indicador de longitud, si está presente o una secuencia de terminador para determinar la longitud de los datos. Si se proporciona un indicador de longitud y una secuencia de terminador, la copia masiva usa la que da como resultado la menor cantidad de datos que se copian. Si BCP_FMT_DATA_LEN es SQL_VARLEN_DATA, el tipo de datos es un carácter de SQL Server o un tipo binario y no se especifica un indicador de longitud ni una secuencia de terminador, el sistema devuelve un mensaje de error. Si BCP_FMT_DATA_LEN es 0 o un valor positivo, el sistema usa BCP_FMT_DATA_LEN como longitud máxima de los datos. Sin embargo, si, además de una BCP_FMT_DATA_LEN positiva, se proporciona un indicador de longitud o una secuencia de terminador, el sistema determina la longitud de los datos mediante el método que da como resultado la menor cantidad de datos que se copian. El valor BCP_FMT_DATA_LEN representa el recuento de bytes de datos. Si los datos de caracteres se representan mediante caracteres anchos Unicode, un valor de parámetro de BCP_FMT_DATA_LEN positivo representa el número de caracteres multiplicados por el tamaño, en bytes, de cada carácter. |
| BCP_FMT_TERMINATOR | LPCBYTE | Puntero a la secuencia del terminador (ANSI o Unicode según corresponda) que se usará para esta columna. Este parámetro es útil principalmente para los tipos de datos de caracteres porque todos los demás tipos son de longitud fija o, en el caso de los datos binarios, requieren un indicador de longitud para registrar con precisión el número de bytes presentes. Para evitar la terminación de los datos extraídos o para indicar que no se han terminado los datos de un archivo de usuario, establezca este parámetro en NULL. Si se usa más de un medio para especificar una longitud de columna de archivo de usuario (como un terminador y un indicador de longitud, o un terminador y una longitud máxima de columna), la copia masiva elige la que da como resultado la menor cantidad de datos que se copian. La API de copia masiva realiza la conversión de caracteres Unicode a MBCS según sea necesario. Se debe tener cuidado para asegurarse de que la cadena de bytes del terminador y la longitud de la cadena de bytes se establecen correctamente. |
| BCP_FMT_SERVER_COL | INT | Posición ordinal de la columna en la base de datos |
| BCP_FMT_COLLATION | LPCSTR | Nombre de intercalación. |
pValue
Es el puntero al valor que se va a asociar a la propiedad . Permite establecer individualmente cada propiedad de formato de columna.
cbvalue
Es la longitud del búfer de propiedades en bytes.
Devoluciones
SUCCEED o FAIL.
Observaciones
Esta función reemplaza a la función bcp_colfmt . Toda la funcionalidad de bcp_colfmt se proporciona en bcp_setcolfmt función. Además, también se proporciona compatibilidad con la intercalación de columnas. Se recomienda establecer los siguientes atributos de formato de columna en el orden indicado a continuación:
BCP_FMT_SERVER_COL
BCP_FMT_DATA_LEN
BCP_FMT_TYPE
La función bcp_setcolfmt permite especificar el formato de archivo de usuario para copias masivas. Para la copia masiva, un formato contiene las siguientes partes:
Asignación de columnas de archivo de usuario a columnas de base de datos.
Tipo de datos de cada columna de archivo de usuario.
Longitud del indicador opcional para cada columna.
Longitud máxima de datos por columna de archivo de usuario.
Secuencia de bytes de terminación opcional para cada columna.
Longitud de la secuencia de bytes de terminación opcional.
Cada llamada a bcp_setcolfmt especifica el formato de una columna de archivo de usuario. Por ejemplo, para cambiar la configuración predeterminada de tres columnas en un archivo de datos de usuario de cinco columnas, primero llame a bcp_columns(5) y, a continuación, llame a bcp_setcolfmt cinco veces, con tres de esas llamadas estableciendo el formato personalizado. Para las dos llamadas restantes, establezca BCP_FMT_TYPE en 0 y establezca BCP_FMT_INDICATOR_LENGTH, BCP_FMT_DATA_LEN y cbValue en 0, SQL_VARLEN_DATA y 0 respectivamente. Este procedimiento copia las cinco columnas, tres con el formato personalizado y dos con el formato predeterminado.
Se debe llamar a la función bcp_columns antes de llamar a bcp_setcolfmt.
Debe llamar a bcp_setcolfmt una vez para cada propiedad de cada columna del archivo de usuario.
No es necesario copiar todos los datos de un archivo de usuario en la tabla de SQL Server. Para omitir una columna, especifique el formato de los datos de la columna, estableciendo el parámetro BCP_FMT_SERVER_COL en 0. Si desea omitir una columna, debe especificar su tipo.
La función bcp_writefmt se puede usar para conservar la especificación de formato.
bcp_setcolfmt compatibilidad con características mejoradas de fecha y hora
Los tipos usados con la propiedad BCP_FMT_TYPE para los tipos de fecha y hora se especifican en Cambios de copia masiva para tipos de fecha y hora mejorados (OLE DB y ODBC).
Para obtener más información, vea Mejoras de fecha y hora (ODBC).