Compartir vía


IBCPSession::BCPInit (proveedor OLE DB de Native Client)

Se aplica a: SQL Server Azure SQL Database Azure SQL Instancia administrada Azure Synapse Analytics Analytics Platform System (PDW)

Importante

SQL Server Native Client (a menudo abreviado SNAC) se ha quitado de SQL Server 2022 (16.x) y SQL Server Management Studio 19 (SSMS). Para nuevos trabajos de desarrollo, no se recomiendan ni el proveedor OLE DB de SQL Server Native Client (SQLNCLI o SQLNCLI11) ni el proveedor OLE DB de Microsoft para SQL Server (SQLOLEDB) heredado. Cambie al nuevo Controlador Microsoft OLE DB para SQL Server de ahora en adelante.

Inicializa la estructura de copia masiva, realiza algunas comprobaciones de errores, comprueba que los datos y los nombres de archivo de formato son correctos y, a continuación, los abre.

Sintaxis

  
HRESULT BCPInit(   
      const wchar_t *pwszTable,  
      const wchar_t *pwszDataFile,  
      const wchar_t *pwszErrorFile,  
      int eDirection);  

Observaciones

Es necesario llamar al método BCPInit antes de llamar a cualquier otro método de copia masiva. El método BCPInit realiza las inicializaciones necesarias para una copia masiva de datos entre la estación de trabajo y SQL Server.

El método BCPInit examina la estructura del origen de base de datos o la tabla de destino, no el archivo de datos. Especifica los valores de formato de datos del archivo de datos basándose en cada columna de la tabla de base de datos, la vista o el conjunto de resultados de la instrucción SELECT. Esta especificación incluye el tipo de datos de cada columna, la presencia o ausencia de cadenas de bytes de un indicador de longitud o nulo y de terminador en los datos, y el ancho de los tipos de datos de longitud fija. El método BCPInit establece estos valores como sigue:

  • El tipo de datos especificado es el tipo de datos de la columna de la tabla de base de datos, la vista o el conjunto de resultados de una instrucción SELECT. El tipo de datos se enumera mediante tipos de datos nativos de SQL Server especificados en el archivo de encabezado de SQL Server Native Client (sqlncli.h). Sus valores están en el modelo de BCP_TYPE_XXX. Los datos están representados en el formato del equipo. Es decir, los datos de una columna de tipo de datos entero están representados por una secuencia de cuatro bytes "big endian" o "little endian" basada en el equipo que creó el archivo de datos.

  • Si un tipo de datos de base de datos es de longitud fija, los datos del archivo de datos también serán de longitud fija. Los métodos de copia masiva que procesan los datos (por ejemplo, IBCPSession::BCPExec) analizan las filas de datos esperando que la longitud de los datos del archivo de datos sea idéntica a la longitud de los datos especificados en la tabla de base de datos, la vista o la lista de columnas de la instrucción SELECT. Por ejemplo, los datos de una columna de base de datos definidos como char(13) deben estar representados por 13 caracteres por cada fila de datos del archivo. Los datos de longitud fija pueden tener como prefijo un indicador nulo si la columna de base de datos permite valores nulos.

  • Cuando se copian datos en SQL Server, el archivo de datos debe tener datos para cada columna de la tabla de base de datos. Cuando se copian datos de SQL Server, los datos de todas las columnas de la tabla de base de datos, la vista o el conjunto de resultados de la instrucción SELECT se copian en el archivo de datos.

  • Cuando se copian datos en SQL Server, la posición ordinal de una columna en el archivo de datos debe ser idéntica a la de la columna en la tabla de base de datos. Cuando se copian datos de SQL Server, el método BCPExec coloca los datos en función de la posición ordinal de la columna en la tabla de base de datos.

  • Si un tipo de datos de base de datos es de longitud variable (por ejemplo, varbinary(22)) o si una columna de base de datos puede contener valores NULL, se antepone a los datos del archivo de datos un indicador de longitud o nulo. El ancho del indicador varía en función del tipo de datos y de la versión de copia masiva. La opción IBCPSession::BCPControl del método BCP_OPTION_FILEFMT proporciona compatibilidad entre los archivos de datos de copia masiva anteriores y los servidores donde se ejecutan versiones posteriores de SQL Server al indicar cuándo el ancho de los indicadores de los datos es inferior a lo esperado.

Nota

Para cambiar los valores de formato de datos especificados para un archivo de datos, use los métodos IBCPSession::BCPColumns e IBCPSession::BCPColFmt.

Las copias masivas en SQL Server se pueden optimizar para las tablas que no contienen índices estableciendo la opción de base de datos select into/bulkcopy.

Argumentos

pwszTable[in]
Nombre de la tabla de base de datos en o de la que se va a copiar. El nombre puede incluir el nombre de la base de datos o el nombre del propietario. Por ejemplo, "pubs.username.titles", "pubs..titles", "username.titles".

Si el argumento eDirection está establecido en BCP_DIRECTION_OUT, el argumento pwszTable puede ser el nombre de una vista de base de datos.

Si el argumento eDirection está establecido en BCP_DIRECTION_OUT y se especifica una instrucción SELECT con el método BCPControl antes de llamar al método BCPExec, el argumento pwszTable tiene que establecerse en NULL.

pwszDataFile[in]
Nombre del archivo de usuario en o del que se va a copiar.

pwszErrorFile[in]
Nombre del archivo de error que se va a rellenar con mensajes de progreso, mensajes de error y copias de las filas que, por cualquier razón, no se puedan copiar de un archivo de usuario en una tabla. Si el argumento pwszErrorFile se establece en NULL, no se usa ningún archivo de error.

eDirection[in]
Dirección de la operación de copia, BCP_DIRECTION_IN o BCP_DIRECTION_OUT. BCP_DIRECTION_IN indica una copia de un archivo de usuario en una tabla de base de datos; BCP_DIRECTION_OUT indica una copia de una tabla de base de datos en un archivo de usuario.

Valores de código de retorno

S_OK
El método se ha llevado a cabo de forma correcta.

E_FAIL
Se ha producido un error específico del proveedor; para obtener información detallada, use la interfaz ISQLServerErrorInfo.

E_OUTOFMEMORY
Error de memoria insuficiente.

E_INVALIDARG
No se han especificado correctamente uno o varios argumentos. Por ejemplo, se proporcionó un nombre de archivo no válido.

Consulte también

IBCPSession (OLE DB)
Realizar operaciones de copia masiva