Partager via


Prise en charge des colonnes éparses dans SQL Server Native Client (OLE DB)

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Important

SQL Server Native Client (souvent abrégé en SNAC) a été supprimé dans SQL Server 2022 (16.x) et SQL Server Management Studio 19 (SSMS). Le fournisseur OLE DB pour SQL Server Native Client (SQLNCLI ou SQLNCLI11) et le fournisseur Microsoft OLE DB hérité pour SQL Server (SQLOLEDB) ne sont pas recommandés dans les nouveaux développements. Utilisez à la place le nouveau Microsoft OLE DB Driver (MSOLEDBSQL) pour SQL Server.

Cette rubrique fournit des informations sur la prise en charge OLE DB de SQL Server Native Client pour les colonnes éparses. Pour plus d’informations sur les colonnes éparses, consultez Prise en charge des colonnes éparses dans SQL Server Native Client. Pour consulter un exemple, voir Afficher les métadonnées de colonne et de catalogue pour les colonnes éparses (OLE DB).

Métadonnées d'instruction OLE DB

À partir de SQL Server 2008 (10.0.x), une nouvelle valeur d’indicateur DBCOLUMNFLAGS, DBCOLUMNFLAGS_SS_ISCOLUMNSET, est disponible. Cette valeur doit être définie pour les colonnes qui sont des valeurs column_set. L’indicateur DBCOLUMNFLAGS peut être récupéré via le paramètre dwFlags de IColumnsInfo::GetColumnsInfo et la colonne DBCOLUMN_FLAGS de l’ensemble de lignes retourné par IColumnsRowset::GetColumnsRowset.

Métadonnées de catalogue OLE DB

Deux colonnes supplémentaires spécifiques à SQL Server ont été ajoutées à DBSCHEMA_COLUMNS.

Nom de la colonne Type de données Valeur/commentaires
SS_IS_SPARSE DBTYPE_BOOL Si la colonne est une colonne éparse, la valeur est VARIANT_TRUE ; sinon, VARIANT_FALSE.
SS_IS_COLUMN_SET DBTYPE_BOOL Si la colonne est la colonne column_set éparse, la valeur est VARIANT_TRUE ; sinon, VARIANT_FALSE.

Deux ensembles de lignes de schéma supplémentaires ont également été ajoutés. Ces ensembles de lignes ont la même structure que DBSCHEMA_COLUMNS mais retournent un contenu différent. DBSCHEMA_COLUMNS_EXTENDED retourne toutes les colonnes, indépendamment de l’appartenance à column_set. DBSCHEMA_SPARSE_COLUMN_SET retourne seulement les colonnes qui sont membres du column_set épars.

Comportement OLE DB de DataTypeCompatibility

Le comportement de DataTypeCompatibility=80 (dans la chaîne de connexion) est cohérent par rapport à un client SQL Server 2000 (8.x), comme suit :

  • Les nouveaux ensembles de lignes de schéma ne sont pas visibles, et il n'y a pas de lignes pour eux dans l'ensemble de lignes d'ensembles de lignes de schéma.

  • Les nouvelles colonnes de l'ensemble de lignes COLUMNS ne sont pas visibles.

  • DBCOLUMNFLAGS_SS_ISCOLUMNSET n’est pas défini pour les colonnes de column_set.

  • DBCOMPUTEMODE_NOTCOMPUTED est défini pour les colonnes de column_set.

Prise en charge OLE DB des colonnes éparses

Les interfaces OLE DB suivantes ont été modifiées dans SQL Server Native Client pour prendre en charge les colonnes éparses :

Type ou fonction membre Description
IColumnsInfo::GetColumnsInfo Une nouvelle valeur d’indicateur DBCOLUMNFLAGS, DBCOLUMNFLAGS_SS_ISCOLUMNSET, est définie pour les colonnes de column_set dans dwFlags.

DBCOLUMNFLAGS_WRITE est défini pour les colonnes de column_set.
IColumsRowset::GetColumnsRowset Une nouvelle valeur d’indicateur DBCOLUMNFLAGS, DBCOLUMNFLAGS_SS_ISCOLUMNSET, est définie pour les colonnes de column_set dans DBCOLUMN_FLAGS.

DBCOLUMN_COMPUTEMODE est défini sur DBCOMPUTEMODE_DYNAMIC pour les colonnes de column_set.
IDBSchemaRowset::GetSchemaRowset DBSCHEMA_COLUMNS retourne deux nouvelles colonnes : SS_IS_COLUMN_SET et SS_IS_SPARSE.

DBSCHEMA_COLUMNS retourne seulement les colonnes qui ne sont pas membres d’un column_set.

Deux nouveaux ensembles de lignes de schéma ont été ajoutés : DBSCHEMA_COLUMNS_EXTENDED retourne toutes les colonnes, indépendamment du caractère épars de l’appartenance à column_set. DBSCHEMA_SPARSE_COLUMN_SET retourne seulement les colonnes qui sont membres d’un column_set. Ces nouveaux ensembles de lignes ont les mêmes colonnes et restrictions que DBSCHEMA_COLUMNS.
IDBSchemaRowset::GetSchemas IDBSchemaRowset::GetSchemas inclut les GUID des nouveaux ensembles de lignes DBSCHEMA_COLUMNS_EXTENDED et DBSCHEMA_SPARSE_COLUMN_SET dans la liste des ensembles de lignes de schéma disponibles.
ICommand::Execute Si la table est sélectionnée * est utilisée, elle retourne toutes les colonnes qui ne sont pas membres du column_set partiellement alloué, ainsi qu’une colonne XML qui contient des valeurs de toutes les colonnes non null qui sont membres du column_set partiellement alloué, le cas échéant.
IOpenRowset::OpenRowset IOpenRowset::OpenRowset retourne un ensemble de lignes avec les mêmes colonnes que ICommand::Execute, avec une requête select * sur la même table.
ITableDefinition Il n’y a aucune modification de cette interface pour les colonnes éparses ou les colonnes d’un column_set. Les applications qui doivent effectuer des modifications de schéma doivent exécuter le Transact-SQL approprié directement.

Voir aussi

SQL Server Native Client (OLE DB)