Compatibilidad con columnas dispersas (OLE DB)
En este tema se proporciona información sobre la compatibilidad ole DB de SQL Server Native Client con columnas dispersas. Para obtener más información sobre las columnas dispersas, vea Compatibilidad con columnas dispersas en SQL Server Native Client. 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, hay disponible un nuevo valor de marca DBCOLUMNFLAGS, DBCOLUMNFLAGS_SS_ISCOLUMNSET. Este valor debería estar establecido 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 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_set
dispersas.
Comportamiento de OLE DB DataTypeCompatibility
El comportamiento con DataTypeCompatibility=80
(en el cadena de conexión) es coherente con un cliente de SQL Server 2000, como se indica a continuación:
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 OLE DB se modificaron en SQL Server Native Client para admitir columnas dispersas:
Tipo o función de miembro | Descripción |
---|---|
IColumnsInfo::GetColumnsInfo | Se establece un nuevo valor de marca DBCOLUMNFLAGS DBCOLUMNFLAGS_SS_ISCOLUMNSET para column_set las columnas de 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 ú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 * de la tabla , devuelve todas las columnas que no son miembros del disperso column_set , además de una columna XML que contiene valores de todas las columnas que no son null que son miembros del disperso column_set , si están presentes. |
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 código Transact-SQL adecuado. |