Partager via


Interrogation des catalogues système de SQL Server

Les applications dynamiques qui ne sont pas codées en dur pour fonctionner avec un jeu spécifique de tables et de vues doivent posséder un mécanisme permettant de déterminer la structure et les attributs des objets des bases de données auxquelles elles se connectent. Ces applications peuvent avoir besoin des informations suivantes :

  • Le nombre et le nom des tables et des vues de la base de données.

  • Le nombre de colonnes d'une table ou d'une vue ainsi que le nom, le type de données, l'échelle et la précision de chaque colonne.

  • Les contraintes définies sur les tables.

  • Les index et les clés des tables.

Le catalogue système fournit ces informations pour les bases de données SQL Server. Au cœur des catalogues système SQL Server se situe un ensemble de vues qui affichent les métadonnées décrivant les objets dans une instance de SQL Server. Les métadonnées sont des données décrivant les attributs des objets d'un système. Les applications basées sur SQL Server peuvent accéder aux informations des catalogues système au moyen des éléments suivants :

  • Affichages catalogue. Nous recommandons cette méthode d'accès.

  • Vues des schémas d'information.

  • Ensembles de lignes de schémas OLE DB.

  • Fonctions de catalogue ODBC.

  • Fonctions et procédures stockées système.

Affichages catalogue

Les affichages catalogue permettent d'accéder aux métadonnées stockées dans chaque base de données sur le serveur.

[!REMARQUE]

Les affichages catalogue ne permettent pas d'accéder aux métadonnées de réplication, de l'Agent SQL Server ou de sauvegarde.

Nous recommandons l'utilisation d'affichages catalogue pour l'accès aux métadonnées pour les raisons suivantes :

  • Les affichages catalogue permettent de visualiser toutes les métadonnées.

  • Les affichages catalogue présentent les métadonnées dans un format indépendant de toute implémentation de table de catalogue, et ne sont donc pas affectés par des modifications apportées aux tables sous-jacentes.

  • Les affichages catalogue offrent la manière la plus rapide et efficace d'accéder aux métadonnées serveur de base.

  • Les affichages catalogue constituent une interface générale d'accès aux métadonnées des catalogues et permettent d'obtenir, de transformer et de personnaliser des formulaires utilisant ces métadonnées de manière immédiate.

  • Les noms des affichages catalogue et de leurs colonnes sont descriptifs. Les résultats de la requête sont ceux auxquels s'attendrait un utilisateur qui ne connaît pas parfaitement la fonctionnalité correspondant aux métadonnées qui sont interrogées.

Par exemple, la requête suivante utilise l'affichage catalogue sys.objects pour retourner tous les objets de base de données qui ont été modifiés au cours des 10 derniers jours.

SELECT name AS object_name 
  ,SCHEMA_NAME(schema_id) AS schema_name
  ,type_desc
  ,create_date
  ,modify_date
FROM sys.objects
WHERE modify_date > GETDATE() - 10
ORDER BY modify_date;

Pour plus d'exemples d'interrogation du catalogue système à l'aide des affichages catalogue, consultez Questions fréquentes sur l'interrogation des catalogues système de SQL Server.

Important

Dans les versions ultérieures de SQL Server, Microsoft peut augmenter la définition de l'affichage catalogue système en ajoutant des colonnes à la fin de la liste des colonnes. Nous déconseillons l'utilisation de la syntaxe SELECT * FROM sys.catalog_view_name dans le code de production car le nombre de colonnes retourné peut changer et altérer votre application.

Vues des schémas d'informations

Les vues des schémas d'informations sont basées sur les définitions des affichages catalogue de la norme ISO. Elles présentent les informations de catalogue dans un format indépendant de toute implémentation de table de catalogue, et ne sont donc pas affectées par des modifications apportées aux tables sous-jacentes. Les applications qui utilisent ces vues sont utilisables sur différents systèmes de bases de données hétérogènes compatibles avec la norme ISO. Pour plus d'informations, consultez Vues de schémas d'informations (Transact-SQL).

[!REMARQUE]

Les vues des schémas d'informations ne contiennent pas de métadonnées spécifiques à SQL Server 2008.

L'exemple suivant interroge la vue INFORMATION_SCHEMA.COLUMNS pour retourner toutes les colonnes de la table Contact dans la base de données AdventureWorks.

SELECT TABLE_NAME, COLUMN_NAME, COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA + '.' + TABLE_NAME), COLUMN_NAME, 'ColumnID') AS COLUMN_ID
FROM AdventureWorks.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Contact';

Vues de compatibilité

Une grande partie des tables système des versions antérieures de SQL Server ont été regroupées. Ces vues sont connues sous le nom de vues de compatibilité car elles ont été exclusivement conçues à des fins de compatibilité descendante. Elles affichent les mêmes métadonnées que celles qui sont disponibles dans SQL Server 2000. En revanche, elles ne présentent pas les métadonnées liées aux fonctionnalités introduites dans SQL Server 2005 et versions ultérieures. Par conséquent, lorsque vous utilisez une nouvelle fonctionnalité, comme Service Broker ou le partitionnement, vous devez impérativement utiliser les affichages catalogue. Cette contrainte est une bonne raison de passer aux affichages catalogue. De plus, les colonnes des vues de compatibilité qui contiennent les ID d'utilisateur et les ID de type présentent le risque de retourner la valeur NULL ou de déclencher des dépassements arithmétiques. En effet, dans SQL Server 2005 et version ultérieures, vous pouvez créer plus de 32 767 utilisateurs et types de données. Par exemple, si vous deviez créer 32 768 utilisateurs, puis exécuter cette requête : SELECT * FROM sys.sysusers; si l'option ARITHABORT est activée (ON), la requête échoue en raison d'une erreur de dépassement arithmétique. Si l'option ARITHABORT est désactivée (OFF), la colonne uid retourne NULL.

Pour éviter ces problèmes, nous vous conseillons d'utiliser les nouveaux affichages catalogue capables de gérer un nombre plus élevé d'ID d'utilisateur et d'ID de type.

Ensembles de lignes des schémas OLE DB

La spécification OLE DB définit une interface IDBSchemaRowset qui expose un jeu d'ensembles de lignes de schéma contenant les informations du catalogue. Les ensembles de lignes de schémas OLE DB constituent une méthode de présentation standard des informations du catalogue prises en charge par différents fournisseurs OLE DB. Les ensembles de lignes sont indépendants de la structure des tables de catalogue sous-jacentes. Pour plus d'informations, consultez Prise en charge des ensembles de lignes de schéma (OLE DB).

Le fournisseur OLE DB pour Microsoft SQL Server Native Client prend en charge une extension de IDBSchemaRowset qui transmet des informations du catalogue pour les serveurs liés utilisés dans les requêtes distribuées. Pour plus d'informations, consultez Ensemble de lignes LINKEDSERVERS (OLE DB).

Fonctions de catalogue ODBC

La spécification ODBC définit un jeu de fonctions du catalogue qui retournent des ensembles de résultats contenant les informations du catalogue. Ces fonctions constituent une méthode de présentation standard des informations du catalogue prises en charge par les différents pilotes ODBC. Ces ensembles de résultats sont indépendants de la structure des tables de catalogue sous-jacentes.

Le pilote ODBC de SQL Server Native Client prend en charge deux fonctions spécifiques qui récupèrent des informations du catalogue concernant les serveurs liés utilisés dans les requêtes distribuées. Pour plus d'informations, consultez Utilisation des fonctions de catalogue.

Fonctions et procédures stockées système

Transact-SQL définit des procédures stockées système et des fonctions système qui retournent des informations du catalogue. Bien que ces procédures stockées et ces fonctions soient spécifiques à SQL Server, elles isolent les utilisateurs de la structure sous-jacente de tables de catalogues système. Pour plus d'informations, consultez Fonctions de métadonnées (Transact-SQL) et Procédures stockées système (Transact-SQL).