Share via


Compatibilidad con columnas dispersas (OLE DB)

En este tema se proporciona información acerca de la compatibilidad con columnas dispersas OLE DB de SQL Server Native Client. Para obtener más información acerca de las columnas dispersas, vea Compatibilidad con columnas dispersas en SQL Server Native Client.

Metadatos de instrucción OLE DB

A partir de SQL Server 2008, está disponible un nuevo valor de marcador DBCOLUMNFLAGS, DBCOLUMNFLAGS_SS_ISCOLUMNSET. Este valor debería estar establecido para las columnas que son valores column_set. El marcador DBCOLUMNFLAGS se puede recuperar a través del parámetro dwFlags de IColumnsInfo::GetColumnsInfo y la columna DBCOLUMN_FLAGS del conjunto de filas que devuelve 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 column_set dispersa, 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 únicamente devuelve columnas que son miembros de las columnas column_setdispersas.

Comportamiento de OLE DB DataTypeCompatibility

El comportamiento con DataTypeCompatibility=80 (en la cadena de conexión) es constante con un cliente de SQL Server 2000, como sigue:

  • 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

En SQL Server Native Client, se modificaron las siguientes interfaces OLE DB para admitir columnas dispersas:

Tipo o función de miembro

Descripción

IColumnsInfo::GetColumnsInfo

Un nuevo valor de marcador 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 marcador 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 únicamente 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 únicamente 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 * from table, devuelve todas las columnas que no son miembros de las columnas column_setdispersas, más una columna XML que contiene valores de todas las columnas distintas de NULL que son miembros de las columnas column_set dispersas, si existe.

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 hay ningún cambio a esta interfaz para las columnas dispersas o para las columnas column_set. Las aplicaciones que tienen que realizar modificaciones de esquema deben ejecutar directamente el Transact-SQL adecuado.