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)
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. |