Compatibilidad con columnas dispersas en SQL Server Native Client (OLE DB)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Importante

SQL Server Native Client (a menudo abreviado SNAC) se ha quitado de SQL Server 2022 (16.x) y SQL Server Management Studio 19 (SSMS). Para nuevos trabajos de desarrollo, no se recomiendan ni el proveedor OLE DB de SQL Server Native Client (SQLNCLI o SQLNCLI11) ni el proveedor OLE DB de Microsoft para SQL Server (SQLOLEDB) heredado. Cambie al nuevo Controlador Microsoft OLE DB para SQL Server de ahora en adelante.

En este tema se proporciona información sobre SQL Server Native Client compatibilidad de OLE DB 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 (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 OLE DB se modificaron en SQL Server Native Client 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 * fromtable, se devuelven todas las columnas que no son miembros de las columnas column_set dispersas, 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 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

SQL Server Native Client (OLE DB)