Dans SQL Server, vous pouvez utiliser les VIEWS
Transact-SQL vue de schéma d'informations système pour renvoyer des informations sur une ou plusieurs vues de la base de données actuelle. Il renvoie une ligne pour les vues accessibles par l'utilisateur actuel dans la base de données actuelle.
Pour utiliser cette vue, spécifiez le nom complet de INFORMATION_SCHEMA.VIEWS
.
Exemple 1 – Renvoyer des informations sur une vue spécifique
Voici un exemple de retour d'informations sur toutes les vues auxquelles l'utilisateur actuel a accès dans la base de données actuelle.
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, CHECK_OPTION, IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS;
Résultat :
+-----------------+----------------+--------------+----------------+----------------+ | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | CHECK_OPTION | IS_UPDATABLE | |-----------------+----------------+--------------+----------------+----------------| | Music | dbo | RockAlbums | NONE | NO | | Music | dbo | JazzAlbums | NONE | NO | | Music | dbo | BluesAlbums | NONE | NO | +-----------------+----------------+--------------+----------------+----------------+
J'ai intentionnellement omis une colonne dans cet exemple. J'ai omis le VIEW_DEFINITION
colonne. Je l'ai laissé de côté car il gâche la sortie lors de l'utilisation de mon outil de ligne de commande. Vous pouvez voir un exemple qui inclut cette colonne ci-dessous.
Notez que la documentation Microsoft avertit que vous ne devez pas utiliser le INFORMATION_SCHEMA
vues pour déterminer le schéma d'un objet. Le seul moyen fiable de trouver le schéma d'un objet est d'interroger le sys.objects
vue du catalogue.
Exemple 2 – Renvoyer des informations sur une vue spécifique
Voici un exemple de retour d'informations sur une vue spécifique.
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, CHECK_OPTION, IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Résultat :
+-----------------+----------------+--------------+----------------+----------------+ | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | CHECK_OPTION | IS_UPDATABLE | |-----------------+----------------+--------------+----------------+----------------| | Music | dbo | RockAlbums | NONE | NO | +-----------------+----------------+--------------+----------------+----------------+
Le revoici avec le VIEW_DEFINITION
colonne incluse :
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Résultat :
+-----------------+----------------+--------------+-------------------+----------------+----------------+ | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | VIEW_DEFINITION | CHECK_OPTION | IS_UPDATABLE | |-----------------+----------------+--------------+-------------------+----------------+----------------| | Music | dbo | RockAlbums | CREATE VIEW RockAlbums AS SELECT AlbumName, ArtistName FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE Genres.Genre = 'Rock'; | NONE | NO | +-----------------+----------------+--------------+-------------------+----------------+----------------+
Exemple 3 – Renvoyer uniquement la définition de la vue
Malgré l'inconvénient de la définition de la vue qui gâche ma mise en page, cette colonne peut être utile si vous recherchez simplement la définition de la vue :
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Résultat :
+-------------------+ | VIEW_DEFINITION | |-------------------| | CREATE VIEW RockAlbums AS SELECT AlbumName, ArtistName FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE Genres.Genre = 'Rock'; | +-------------------+
Exemple 4 - Renvoyer les définitions de vue de plusieurs vues
Le VIEW_DEFINITION
peut être très pratique si vous souhaitez répertorier les définitions de vues pour plusieurs vues à la fois :
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Résultat :
+-------------------+ | VIEW_DEFINITION | |-------------------| | CREATE VIEW RockAlbums AS SELECT AlbumName, ArtistName FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE Genres.Genre = 'Rock'; | | CREATE VIEW JazzAlbums AS SELECT AlbumName, ArtistName FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE Genres.Genre = 'Jazz'; | | CREATE VIEW BluesAlbums AS SELECT AlbumName, ArtistName FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE Genres.Genre = 'Blues'; | +-------------------+ (3 rows affected)
Exemple 5 - Renvoyer des définitions de grande vue
Le VIEW_DEFINITION
la colonne a une longueur maximale de nvarchar(4000) . Pour les définitions de vue plus grandes que cela, vous pouvez utiliser le OBJECT_DEFINITION()
fonction (avec le OBJECT_ID()
fonction) pour renvoyer la définition complète.
La valeur de retour de OBJECT_DEFINITION()
la fonction est nvarchar(max) , il n'a donc pas la limitation de caractères du VIEW_DEFINITION
colonne (qui, comme mentionné, est nvarchar(4000) ).
Exemple :
SELECT OBJECT_DEFINITION(OBJECT_ID(TABLE_NAME)) FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Résultat :
+--------------------+ | (No column name) | |--------------------| | CREATE VIEW RockAlbums AS SELECT AlbumName, ArtistName FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE Genres.Genre = 'Rock'; | +--------------------+
Évidemment, cet exemple ne montre pas l'avantage d'utiliser le OBJECT_DEFINITION()
fonction, car la définition de vue est trop petite, mais si vous avez une définition de vue extra large, j'espère que cet exemple vous aidera.