Share via


Prise en charge des colonnes fragmentées (OLE DB)

Cette rubrique fournit des informations sur la prise en charge des colonnes fragmentées par le fournisseur OLE DB de SQL Server Native Client. Pour plus d'informations sur les colonnes fragmentées, consultez Prise en charge des colonnes fragmentées dans SQL Server Native Client.

Métadonnées d'instruction OLE DB

À partir de SQL Server 2008, 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 fragmentée, la valeur est VARIANT_TRUE ; sinon, VARIANT_FALSE.

SS_IS_COLUMN_SET

DBTYPE_BOOL

Si la colonne est la colonne column_set fragmentée, 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 uniquement les colonnes qui sont membres du column_set fragmenté.

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, 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 column_set.

  • DBCOMPUTEMODE_NOTCOMPUTED est défini pour les colonnes column_set.

Prise en charge OLE DB des colonnes fragmentées

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

Type ou fonction membre

Description

IColumnsInfo::GetColumnsInfo

Une nouvelle valeur d'indicateur DBCOLUMNFLAGS, DBCOLUMNFLAGS_SS_ISCOLUMNSET, est définie pour les colonnes column_set dans dwFlags.

DBCOLUMNFLAGS_WRITE est défini pour les colonnes column_set.

IColumsRowset::GetColumnsRowset

Une nouvelle valeur d'indicateur DBCOLUMNFLAGS, DBCOLUMNFLAGS_SS_ISCOLUMNSET, est définie pour les colonnes column_set dans DBCOLUMN_FLAGS.

DBCOLUMN_COMPUTEMODE est défini à DBCOMPUTEMODE_DYNAMIC pour les colonnes column_set.

IDBSchemaRowset::GetSchemaRowset

DBSCHEMA_COLUMNS retourne deux nouvelles colonnes : SS_IS_COLUMN_SET et SS_IS_SPARSE.

DBSCHEMA_COLUMNS retourne uniquement les colonnes qui ne sont pas membres de column_set.

Deux nouveaux ensembles de lignes de schéma ont été ajoutés : DBSCHEMA_COLUMNS_EXTENDED retourne toutes les colonnes indépendamment de la fragmentation de l'appartenance à column_set. DBSCHEMA_SPARSE_COLUMN_SET retourne uniquement les colonnes qui sont membres de 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 select * from table est utilisé, il retourne toutes les colonnes qui ne sont pas membres du column_set fragmenté, plus une colonne XML qui contient les valeurs de toutes les colonnes non Null membres du column_set fragmenté, le cas échéant.

IOpenRowset::OpenRowset

IOpenRowset::OpenRowset retourne un ensemble de lignes avec les mêmes colonnes que ICommand::Execute, ainsi qu'une requête select * sur la même table.

ITableDefinition

Il n'y a aucune modification de cette interface pour les colonnes fragmentées ou les colonnes column_set. Les applications qui doivent effectuer des modifications de schéma doivent exécuter le Transact-SQL approprié directement.