Compartir a través de


Compatibilidad con columnas dispersas (OLE DB)

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Descargar controlador OLE DB

En este tema se proporciona información sobre la compatibilidad de OLE DB Driver for SQL Server con columnas dispersas. Para obtener más información sobre las columnas dispersas, consulte Compatibilidad con las columnas dispersas en OLE DB Driver for SQL Server. Para ver un ejemplo, consulte Mostrar metadatos de columna y del catálogo para columnas dispersas (OLE DB).

Metadatos de instrucción OLE DB

A partir de SQL Server 2008 (10.0.x), está disponible un nuevo valor de marca DBCOLUMNFLAGS, DBCOLUMNFLAGS_SS_ISCOLUMNSET. Este valor tiene que establecerse para las columnas que son valores column_set. La marca DBCOLUMNFLAGS se puede recuperar mediante el parámetro dwFlags de IColumnsInfo::GetColumnsInfo y la columna DBCOLUMN_FLAGS del conjunto de filas devuelto por IColumnsRowset::GetColumnsRowset.

Metadatos de catálogo OLE DB

Se han agregado dos columnas adicionales específicas de SQL Server a DBSCHEMA_COLUMNS.

Nombre de la columna Tipo de datos Valor/comentarios
SS_IS_SPARSE DBTYPE_BOOL Si la columna es una columna dispersa, esto tiene el valor VARIANT_TRUE; de lo contrario, VARIANT_FALSE.
SS_IS_COLUMN_SET DBTYPE_BOOL Si la columna es la columna dispersa column_set, esto tiene el valor VARIANT_TRUE; de lo contrario, VARIANT_FALSE.

También se han agregado dos conjuntos de filas de esquema adicionales. Estos conjuntos de filas tienen la misma estructura que DBSCHEMA_COLUMNS pero devuelven contenido diferente. DBSCHEMA_COLUMNS_EXTENDED devuelve todas las columnas sin tener en cuenta la pertenencia a column_set. DBSCHEMA_SPARSE_COLUMN_SET solo devuelve columnas que son miembros de columnas dispersas column_set.

Comportamiento de OLE DB DataTypeCompatibility

El comportamiento con DataTypeCompatibility=80 (en la cadena de conexión) es coherente con un cliente de SQL Server 2000 (8.x), de la manera siguiente:

  • Los nuevos conjuntos de filas de esquema no están visibles y no hay ninguna fila para ellos en el conjunto de filas de conjuntos de filas de esquema.

  • Las columnas nuevas en el conjunto de filas COLUMNS no están visibles.

  • DBCOLUMNFLAGS_SS_ISCOLUMNSET no está establecido para las columnas column_set.

  • DBCOMPUTEMODE_NOTCOMPUTED está establecido para las columnas column_set.

Compatibilidad de OLE DB con columnas dispersas

Las siguientes interfaces de OLE DB se modificaron en OLE DB driver for SQL Server para admitir columnas dispersas:

Tipo o función de miembro Descripción
IColumnsInfo::GetColumnsInfo Un nuevo valor de marca DBCOLUMNFLAGS, DBCOLUMNFLAGS_SS_ISCOLUMNSET, está establecido para las columnas column_set en dwFlags.

DBCOLUMNFLAGS_WRITE está establecido para las columnas column_set.
IColumsRowset::GetColumnsRowset Un nuevo valor de marca DBCOLUMNFLAGS, DBCOLUMNFLAGS_SS_ISCOLUMNSET, está establecido para las columnas column_set en DBCOLUMN_FLAGS.

DBCOLUMN_COMPUTEMODE está establecido en DBCOMPUTEMODE_DYNAMIC para las columnas column_set.
IDBSchemaRowset::GetSchemaRowset DBSCHEMA_COLUMNS devuelve dos nuevas columnas: SS_IS_COLUMN_SET y SS_IS_SPARSE.

DBSCHEMA_COLUMNS solo devuelve las columnas que no son miembros de column_set.

Se han agregado dos nuevos conjuntos de filas de esquema: DBSCHEMA_COLUMNS_EXTENDED devolverá todas las columnas, independientemente de la dispersión de la pertenencia a column_set. DBSCHEMA_SPARSE_COLUMN_SET solo devuelve columnas que son miembros de column_set. Estos nuevos conjuntos de filas tienen las mismas columnas y restricciones que DBSCHEMA_COLUMNS.
IDBSchemaRowset::GetSchemas IDBSchemaRowset::GetSchemas incluye los GUID para los nuevos conjuntos de filas DBSCHEMA_COLUMNS_EXTENDED y DBSCHEMA_SPARSE_COLUMN_SET en la lista de conjuntos de filas de esquema disponibles.
ICommand::Execute Si se usa select * de la tabla, devuelve todas las columnas que no son miembros del column_set disperso, además de una columna XML que contiene valores de todas las columnas no nulas que son miembros del column_set disperso, si está presente.
IOpenRowset::OpenRowset IOpenRowset::OpenRowset devuelve un conjunto de filas con las mismas columnas que ICommand::Execute, con una consulta select * en la misma tabla.
ITableDefinition No se ha realizado ningún cambio en esta interfaz para las columnas dispersas ni para las columnas column_set. Las aplicaciones que tienen que realizar modificaciones de esquema deben ejecutar directamente el código Transact-SQL adecuado.

Consulte también

Programación del controlador OLE DB para SQL Server