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 característica de copia masiva de SQL Server admite la transferencia de grandes cantidades de datos en una tabla o vista de SQL Server o fuera de ella. Los datos también se pueden transferir especificando una instrucción SELECT. Los datos se pueden mover entre SQL Server y un archivo de datos del sistema operativo, como un archivo ASCII. El archivo de datos puede tener diferentes formatos; el formato se define para copiar de forma masiva en un archivo de formato. Opcionalmente, los datos se pueden cargar en variables de programa y transferirse a SQL Server mediante funciones y métodos de copia masiva.
Para obtener una aplicación de ejemplo que muestre esta característica, consulte Copia masiva de datos mediante IRowsetFastLoad (OLE DB).
Normalmente, una aplicación usa una copia masiva de una de las maneras siguientes:
Copia masiva de una tabla, vista o conjunto de resultados de una instrucción Transact-SQL en un archivo de datos donde los datos se almacenan en el mismo formato que la tabla o vista.
Esto se denomina archivo de datos en modo nativo.
Copia masiva de una tabla, vista o conjunto de resultados de una instrucción Transact-SQL en un archivo de datos donde los datos se almacenan en un formato distinto de la tabla o vista.
En este caso, se crea un archivo de formato independiente que define las características (tipo de datos, posición, longitud, terminador, etc.) de cada columna tal como se almacena en el archivo de datos. Si todas las columnas se convierten en formato de caracteres, el archivo resultante se denomina archivo de datos en modo carácter.
Copia masiva de un archivo de datos en una tabla o vista.
Si es necesario, se usa un archivo de formato para determinar el diseño del archivo de datos.
Cargue datos en variables de programa y, a continuación, importe los datos en una tabla o vista mediante las funciones de copia masiva para la copia masiva en una fila a la vez.
Los archivos de datos usados por las funciones de copia masiva no tienen que ser creados por otro programa de copia masiva. Cualquier otro sistema puede generar un archivo de datos y un archivo de formato según las definiciones de copia masiva; Estos archivos se pueden usar con un programa de copia masiva de SQL Server para importar datos en SQL Server. Por ejemplo, podría exportar datos de una hoja de cálculo en un archivo delimitado por tabulaciones, crear un archivo de formato que describa el archivo delimitado por tabulaciones y, a continuación, usar un programa de copia masiva para importar rápidamente los datos en SQL Server. Los archivos de datos generados por copia masiva también se pueden importar en otras aplicaciones. Por ejemplo, podría usar funciones de copia masiva para exportar datos de una tabla o vista a un archivo delimitado por pestañas que luego se podría cargar en una hoja de cálculo.
Los programadores que codifican aplicaciones para usar las funciones de copia masiva deben seguir las reglas generales para un buen rendimiento de copia masiva. Para obtener más información sobre la compatibilidad con las operaciones de copia masiva en SQL Server, vea Importación y exportación masiva de datos (SQL Server).
Limitaciones y restricciones
Un tipo definido por el usuario (UDT) clR debe enlazarse como datos binarios. Incluso si un archivo de formato especifica SQLCHAR como tipo de datos para una columna UDT de destino, la utilidad BCP tratará los datos como binarios.
No use SET FMTONLY OFF con operaciones de copia masiva. SET FMTONLY OFF puede provocar un error en la operación de copia masiva o dar resultados inesperados.
Proveedor OLE DB de SQL Server Native Client
El proveedor OLE DB de SQL Server Native Client implementa dos métodos para realizar operaciones de copia masiva con una base de datos de SQL Server. El primer método implica el uso de la interfaz IRowsetFastLoad para las operaciones de copia masiva basadas en memoria; y el segundo implica el uso de la interfaz IBCPSession para las operaciones de copia masiva basadas en archivos.
Uso de operaciones de copia masiva basadas en memoria
El proveedor OLE DB de SQL Server Native Client implementa la interfaz IRowsetFastLoad para exponer la compatibilidad con las operaciones de copia masiva basadas en memoria de SQL Server. La interfaz IRowsetFastLoad implementa los métodos IRowsetFastLoad::Commit e IRowsetFastLoad::InsertRow .
Habilitación de una sesión para IRowsetFastLoad
El consumidor notifica al proveedor OLE DB de SQL Server Native Client de su necesidad de copia masiva estableciendo la propiedad de origen de datos específica del proveedor OLE DB de SQL Server Native Client SSPROP_ENABLEFASTLOAD en VARIANT_TRUE. Con la propiedad establecida en el origen de datos, el consumidor crea una sesión de proveedor OLE DB de SQL Server Native Client. La nueva sesión permite el acceso de consumidor a la interfaz IRowsetFastLoad .
Nota:
Si se usa la interfaz IDataInitialize para inicializar el origen de datos, es necesario establecer la propiedad SSPROP_IRowsetFastLoad en el parámetro rgPropertySets del método IOpenRowset::OpenRowset ; De lo contrario, la llamada al método OpenRowset devolverá E_NOINTERFACE.
La habilitación de una sesión para la copia masiva restringe la compatibilidad del proveedor OLE DB de SQL Server Native Client para interfaces en la sesión. Una sesión habilitada para copia masiva expone solo las interfaces siguientes:
IDBSchemaRowset
IGetDataSource
IOpenRowset
ISupportErrorInfo
ITransactionJoin
Para deshabilitar la creación de conjuntos de filas habilitados para copia masiva y hacer que la sesión del proveedor OLE DB de SQL Server Native Client revierta al procesamiento estándar, restablezca SSPROP_ENABLEFASTLOAD a VARIANT_FALSE.
Conjuntos de filas IRowsetFastLoad
Los conjuntos de filas de copia masiva del proveedor OLE DB de SQL Server Native Client son de solo escritura, pero exponen interfaces que permiten al consumidor determinar la estructura de una tabla de SQL Server. Las interfaces siguientes se exponen en un conjunto de filas de proveedor OLE DB de SQL Server Native Client habilitado para copia masiva:
IAccessor
IColumnsInfo
IColumnsRowset
IConvertType
IRowsetFastLoad
IRowsetInfo
ISupportErrorInfo
Las propiedades específicas del proveedor SSPROP_FASTLOADOPTIONS, SSPROP_FASTLOADKEEPNULLS y comportamientos de control de SSPROP_FASTLOADKEEPIDENTITY de un conjunto de filas de copia masiva del proveedor OLE DB de SQL Server Native Client. Las propiedades se especifican en el miembro rgProperties de un miembro de parámetro rgPropertySetsIOpenRowset.
| Id. de propiedad | Descripción |
|---|---|
| SSPROP_FASTLOADKEEPIDENTITY | Columna: No R/W: lectura y escritura Tipo: VT_BOOL Valor predeterminado: VARIANT_FALSE Descripción: mantiene los valores de identidad proporcionados por el consumidor. VARIANT_FALSE: SQL Server genera valores para una columna de identidad en la tabla de SQL Server. El proveedor OLE DB de SQL Server Native Client omite cualquier valor enlazado para la columna. VARIANT_TRUE: el consumidor enlaza un descriptor de acceso que proporciona un valor para una columna de identidad de SQL Server. La propiedad identity no está disponible en las columnas que aceptan NULL, por lo que el consumidor proporciona un valor único en cada llamada IRowsetFastLoad::Insert . |
| SSPROP_FASTLOADKEEPNULLS | Columna: No R/W: lectura y escritura Tipo: VT_BOOL Valor predeterminado: VARIANT_FALSE Descripción: mantiene NULL para las columnas con una restricción DEFAULT. Afecta solo a las columnas de SQL Server que aceptan NULL y tienen aplicada una restricción DEFAULT. VARIANT_FALSE: SQL Server inserta el valor predeterminado para la columna cuando el consumidor ole DB de SQL Server Native Client inserta una fila que contiene NULL para la columna. VARIANT_TRUE: SQL Server inserta NULL para el valor de columna cuando el consumidor del proveedor OLE DB de SQL Server Native Client inserta una fila que contiene NULL para la columna. |
| SSPROP_FASTLOADOPTIONS | Columna: No R/W: lectura y escritura Tipo: VT_BSTR Valor predeterminado: ninguno Descripción: esta propiedad es la misma que -h "hint[,... n]" opción de la utilidad bcp . Las siguientes cadenas se pueden usar como opciones en la copia masiva de datos en una tabla. ORDER(column[ASCDESC | ][,... n]): ordene los datos en el archivo de datos. El rendimiento de la copia masiva se mejora si el archivo de datos que se carga se ordena según el índice agrupado de la tabla. = ROWS_PER_BATCHbb: número de filas de datos por lote (como bb). El servidor optimiza la carga masiva según el valor bb. De forma predeterminada, ROWS_PER_BATCH es desconocido. = KILOBYTES_PER_BATCHcc: número de kilobytes (KB) de datos por lote (como cc). De forma predeterminada, KILOBYTES_PER_BATCH es desconocido. TABLOCK: se adquiere un bloqueo de nivel de tabla durante la operación de copia masiva. Esta opción mejora significativamente el rendimiento porque mantener un bloqueo solo durante la operación de copia masiva reduce la contención de bloqueos en la tabla. Varios clientes pueden cargar una tabla simultáneamente si la tabla no tiene índices y se especifica TABLOCK . De forma predeterminada, el comportamiento de bloqueo viene determinado por el bloqueo de tabla de opciones de tabla en carga masiva. CHECK_CONSTRAINTS: las restricciones de table_name se comprueban durante la operación de copia masiva. De forma predeterminada, se omiten las restricciones. FIRE_TRIGGER: SQL Server usa el control de versiones de fila para desencadenadores y almacena las versiones de fila en el almacén de versiones en tempdb. Por lo tanto, las optimizaciones de registro masivo están disponibles incluso cuando los desencadenadores están habilitados. Antes de importar de forma masiva un lote con un gran número de filas con desencadenadores habilitados, es posible que tenga que expandir el tamaño de tempdb. |
Uso de operaciones de copia masiva basadas en archivos
El proveedor OLE DB de SQL Server Native Client implementa la interfaz IBCPSession para exponer la compatibilidad con las operaciones de copia masiva basadas en archivos de SQL Server. La interfaz IBCPSession implementa IBCPSession::BCPColFmt, IBCPSession::BCPColumns, IBCPSession::BCPControl, IBCPSession::BCPDone, IBCPSession::BCPExec, IBCPSession::BCPInit, IBCPSession::BCPReadFmt e IBCPSession::BCPWriteFmtmétodos.
Controlador ODBC de SQL Server Native Client
El controlador ODBC de SQL Server Native Client mantiene la misma compatibilidad con las operaciones de copia masiva que formaban parte de versiones anteriores del controlador ODBC de SQL Server. Para obtener información sobre las operaciones de copia masiva mediante el controlador ODBC de SQL Server Native Client, vea Realizar operaciones de copia masiva (ODBC).
Véase también
Características de SQL Server Native Client
Propiedades del origen de datos (OLE DB)
Importar y exportar datos de forma masiva (SQL Server)
IRowsetFastLoad (OLE DB)
IBCPSession (OLE DB)
Optimización del rendimiento de la importación masiva