Partager via


Prise en charge des colonnes éparses dans SQL Server Native Client

SQL Server Native Client prend en charge les colonnes éparses. Pour plus d’informations sur les colonnes éparses dans SQL Server, consultez Utiliser des colonnes éparses et Utiliser des jeux de colonnes.

Pour plus d’informations sur la prise en charge des colonnes éparses dans SQL Server Native Client, consultez Prise en charge des colonnes éparses (ODBC) et Prise en charge des colonnes éparses (OLE DB).

Pour plus d’informations sur les exemples d’applications qui illustrent cette fonctionnalité, consultez Exemples de programmation de données SQL Server.

Scénarios utilisateur pour les colonnes éparses et SQL Server Native Client

Le tableau suivant récapitule les scénarios utilisateur courants pour les utilisateurs SQL Server Native Client avec des colonnes éparses :

Scénario Comportement
sélectionnez * dans la table ou IOpenRowset::OpenRowset. Retourne toutes les colonnes qui ne sont pas membres du column_set éparse plus une colonne XML qui contient les valeurs de toutes les colonnes non NULL qui sont membres du column_set éparse.
Référencer une colonne par nom. La colonne peut être référencée quel que soit l'état de sa colonne éparse ou son appartenance à column_set.
Accédez aux colonnes membres de column_set par le biais d'une colonne XML calculée. Vous pouvez avoir accès aux colonnes qui sont membres du column_set éparse en sélectionnant le column_set par nom. Vous pouvez également insérer et mettre à jour des valeurs dans ces colonnes en mettant à jour le code XML dans la colonne column_set.

La valeur doit être conforme au schéma pour les colonnes column_set.
Récupérer les métadonnées de toutes les colonnes d’une table via SQLColumns avec un modèle de recherche de colonne NULL ou '%' (ODBC) ; ou via l’ensemble de lignes de schéma DBSCHEMA_COLUMNS sans restriction de colonne (OLE DB). Retourne une ligne pour toutes les colonnes qui ne sont pas membres d'un column_set. Si la table possède un column_set éparse, une ligne sera retournée pour ce dernier.

Notez que, dans ce cas, des métadonnées ne sont pas retournées pour les colonnes qui sont membres d'un column_set.
Extraire les métadonnées de toutes les colonnes, quel que soit le caractère éparse ou l'appartenance à un column_set. De très nombreuses lignes peuvent alors être retournées. Définissez le champ de descripteur SQL_SOPT_SS_NAME_SCOPE sur SQL_SS_NAME_SCOPE_EXTENDED et appelez SQLColumns (ODBC).

Appelez IDBSchemaRowset::GetRowset pour l’ensemble de lignes de schéma DBSCHEMA_COLUMNS_EXTENDED (OLE DB).

Ce scénario n’est pas possible à partir d’une application qui utilise SQL Server Native Client d’une version antérieure à SQL Server 2008. Toutefois, une telle application offre la possibilité d'interroger directement les vues système.
Extraire les métadonnées uniquement pour les colonnes qui sont membres d'un column_set. De très nombreuses lignes peuvent alors être retournées. Définissez le champ de descripteur SQL_SOPT_SS_NAME_SCOPE sur SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET et appelez SQLColumns (ODBC).

Appelez IDBSchemaRowset::GetRowset pour l’ensemble de lignes de schéma DBSCHEMA_SPARSE_COLUMN_SET (OLE DB).

Ce scénario n’est pas possible à partir d’une application qui utilise SQL Server Native Client d’une version antérieure à SQL Server 2008. Toutefois, une telle application offre la possibilité d'interroger les vues système.
Déterminer si une colonne est éparse. Consultez la colonne SS_IS_SPARSE du jeu de résultats SQLColumns (ODBC).

Consultez la colonne SS_IS_SPARSE de l'ensemble de lignes de schéma DBSCHEMA_COLUMNS (OLE DB).

Ce scénario n’est pas possible à partir d’une application qui utilise SQL Server Native Client d’une version antérieure à SQL Server 2008. Toutefois, une telle application offre la possibilité d'interroger les vues système.
Déterminer si une colonne est un column_set. Consultez la colonne SS_IS_COLUMN_SET du jeu de résultats SQLColumns. Vous pouvez également consulter le SQL Server SQL_CA_SS_IS_COLUMN_SET d’attribut de colonne spécifique (ODBC).

Consultez la colonne SS_IS_COLUMN_SET de l'ensemble de lignes de schéma DBSCHEMA_COLUMNS Ou consultez dwFlags retourné par IColumnsinfo::GetColumnInfo ou DBCOLUMNFLAGS dans l’ensemble de lignes retourné par IColumnsRowset::GetColumnsRowset. Pour les colonnes column_set, DBCOLUMNFLAGS_SS_ISCOLUMNSET est défini (OLE DB).

Ce scénario n’est pas possible à partir d’une application qui utilise SQL Server Native Client d’une version antérieure à SQL Server 2008. Toutefois, une telle application offre la possibilité d'interroger les vues système.
Importez et exportez des colonnes éparses par BCP pour une table sans column_set. Aucun changement de comportement par rapport aux versions précédentes de SQL Server Native Client.
Importer et exporter des colonnes éparses via BCP pour une table sans column_set. le column_set est importé et exporté de la même façon que XML, c’est-à-dire, comme varbinary(max) s’il était lié en tant que type binaire, ou comme nvarchar(max) s’il était lié en tant que char type wchar ou .

Les colonnes qui sont membres du column_set éparse ne sont pas exportées en tant que colonnes distinctes ; elles sont uniquement exportées dans la valeur du column_set.
Comportement de queryout pour BCP. Aucune modification dans la gestion des colonnes nommées explicitement à partir des versions précédentes de SQL Server Native Client.

Les scénarios impliquant des opérations d'importation et d'exportation entre les tables avec des schémas différents peuvent nécessiter une gestion spéciale.

Pour plus d'informations sur BCP, consultez la section « Prise en charge de la copie en bloc (BCP) pour les colonnes éparses » plus loin dans cette rubrique.

Comportement de client de bas niveau

Les clients de bas niveau retournent des métadonnées uniquement pour les colonnes qui ne sont pas membres de l’espace column_set alloué pour SQLColumns et DBSCHMA_COLUMNS. Les ensembles de lignes de schéma OLE DB supplémentaires introduits dans SQL Server 2008 Native Client ne seront pas disponibles, pas plus que les modifications apportées à SQLColumns dans ODBC via SQL_SOPT_SS_NAME_SCOPE.

Les clients de bas niveau peuvent accéder aux colonnes qui sont membres de l’éparse column_set par nom, et la column_set colonne sera accessible en tant que colonne XML aux clients SQL Server 2005.

Prise en charge de la copie en bloc (BCP) pour les colonnes éparses

Que ce soit dans ODBC ou OLE DB, aucune modification de l'API BCP n'a été effectuée pour les colonnes éparses ou les fonctionnalités column_set.

Si une table possède un column_set, les colonnes éparses ne sont pas traitées en tant que colonnes distinctes. Les valeurs de toutes les colonnes éparses sont incluses dans la valeur de column_set, qui est exportée de la même façon qu’une colonne XML; autrement dit, comme varbinary(max) si elle était liée en tant que type binaire, ou comme nvarchar(max) si elle était liée en tant que char type ou wchar ). Lors de l'importation, la valeur column_set doit être conforme au schéma du column_set.

Dans le cadre des opérations queryout, aucun changement n'intervient dans la manière dont les colonnes explicitement référencées sont gérées. Les colonnes column_set affichent le même comportement que les colonnes XML et le caractère éparse n'a aucune incidence sur la gestion des colonnes éparses nommées.

En revanche, si vous faites appel à queryout pour l'exportation et référencez par nom les colonnes éparses membres du jeu de colonnes éparses, vous ne pouvez procéder à aucune importation directe dans une table de structure identique. En effet, BCP utilise des métadonnées cohérentes avec une opération select * pour l’importation et ne peut pas mettre en correspondance column_set les colonnes membres avec ces métadonnées. Pour importer individuellement des colonnes membres column_set, vous devez définir une vue dans la table qui référence les colonnes column_set souhaitées, puis procédez à l'opération d'importation à l'aide de la vue.

Voir aussi

Programmation de SQL Server Native Client