Cet article présente 4 façons d'utiliser T-SQL pour obtenir la définition d'une vue dans SQL Server.
La définition de la vue est l'instruction T-SQL réelle utilisée pour créer la vue.
Exemple 1 - La vue du catalogue système sys.sql_modules
Les sys.sql_modules
la vue du catalogue système renvoie une ligne pour chaque objet qui est un module défini par le langage SQL dans SQL Server.
En d'autres termes, vous pouvez utiliser cette vue pour renvoyer des informations sur des objets de différents types, y compris des fonctions, des procédures stockées et, bien sûr, des vues.
L'une des colonnes renvoyées avec cette vue s'appelle definition
. Comme son nom l'indique, cela renvoie la définition de l'objet.
SELECT definitionFROM sys.sql_modulesWHERE object_id =object_id('Website.Customers');
Résultat :
+--------------+| définition ||--------------|| CRÉER UNE VUE Website.CustomersASSELECT s.CustomerID, s.CustomerName, sc.CustomerCategoryName, pp.FullName AS PrimaryContact, ap.FullName AS AlternateContact, s.PhoneNumber, s.FaxNumber, bg.BuyingGroupName, s.WebsiteURL, dm.DeliveryMethodName AS DeliveryMethod , c.CityName AS CityName, s.DeliveryLocation AS DeliveryLocation, s.DeliveryRun, s.RunPositionFROM Sales.Customers AS sLEFT OUTER JOIN Sales.CustomerCategories AS scON s.CustomerCategoryID =sc.CustomerCategoryIDLEFT OUTER JOIN [Application].Personnes AS ppON s. PrimaryContactPersonID =pp.PersonIDLEFT OUTER JOIN [Application].People AS apON s.AlternateContactPersonID =ap.PersonIDLEFT OUTER JOIN Sales.BuyingGroups AS bgON s.BuyingGroupID =bg.BuyingGroupIDLEFT OUTER JOIN [Application].DeliveryMethods AS dmON s.DeliveryMethodID =dm. DeliveryMethodIDLEFT OUTER JOIN [Application].Cities AS cON s.DeliveryCityID =c.CityID |+--------------+(1 row affe ct)
J'ai utilisé une interface de ligne de commande (CLI) avec cet exemple, donc le résultat est bien formaté.
Si vous utilisez une interface graphique (telle que SSMS ou Azure Data Studio) pour renvoyer les résultats dans une grille, la définition sera probablement renvoyée sur une longue ligne dans une seule cellule. Dans de tels cas, vous devrez effectuer un travail supplémentaire si vous souhaitez qu'il soit affiché dans un format plus lisible. Alternativement, vous pouvez utiliser le sp_helptext
méthode ci-dessous.
Exemple 2 – La procédure stockée système sp_helptext
Une autre méthode pour renvoyer la définition d'une vue consiste à utiliser le sp_helptext
procédure stockée système. En plus de renvoyer la définition d'une vue, il peut également renvoyer la définition d'une règle définie par l'utilisateur, d'une procédure stockée T-SQL non chiffrée par défaut, d'une fonction Transact-SQL définie par l'utilisateur, d'un déclencheur, d'une colonne calculée, de CHECK
contrainte ou objet système tel qu'une procédure stockée système.
Comme mentionné dans l'exemple précédent, cette procédure stockée affiche la définition de la vue sur plusieurs lignes. Chaque ligne contient 255 caractères de la définition T-SQL.
Exemple :
EXEC sp_helptext 'Site Web.Clients' ;
Voici le résultat que j'obtiens en utilisant une interface graphique (Azure Data Studio) :
Et voici ce que j'obtiens en utilisant mon interface de ligne de commande :
+--------+| Texte ||--------|| || CREATE VIEW Website.Clients || COMME || SELECT s.CustomerID, || s.NomClient, || sc.NomCatégorieClient, || pp.NomComplet AS Contact principal, || ap.NomComplet AS Contact Alternatif, || s.PhoneNumber, || s.FaxNumber, || bg.BuyingGroupName, || s.WebsiteURL, || dm.DeliveryMethodName AS DeliveryMethod, || c.CityName AS CityName, || s.DeliveryLocation AS DeliveryLocation, || s.DeliveryRun, || s.RunPosition || DE Ventes.Clients AS s || LEFT OUTER JOIN Sales.CustomerCategories AS sc || ON s.CustomerCategoryID =sc.CustomerCategoryID || LEFT OUTER JOIN [Application].People AS pp || ON s.PrimaryContactPersonID =pp.PersonID || LEFT OUTER JOIN [Application].Personnes AS ap || ON s.AlternateContactPersonID =ap.PersonID || JOINTURE EXTÉRIEURE GAUCHE Sales.BuyingGroups AS bg || ON s.BuyingGroupID =bg.BuyingGroupID || LEFT OUTER JOIN [Application].DeliveryMethods AS dm || ON s.DeliveryMethodID =dm.DeliveryMethodID || LEFT OUTER JOIN [Application].Villes AS c || ON s.DeliveryCityID =c.CityID |+--------+
Cette fois, les résultats sont meilleurs lorsque vous utilisez l'interface graphique.
Exemple 3 - La fonction OBJECT_DEFINITION()
Une autre façon de retourner la définition d'une vue est d'utiliser le OBJECT_DEFINITION()
une fonction. Comme pour les méthodes précédentes, cette méthode peut également renvoyer la définition d'autres types d'objets.
Voici un exemple d'utilisation de cette fonction :
SELECT OBJECT_DEFINITION( OBJECT_ID('Site Web.Clients') ) AS [Définition] ;
Résultat :
+--------------+| Définition ||--------------|| CRÉER UNE VUE Website.CustomersASSELECT s.CustomerID, s.CustomerName, sc.CustomerCategoryName, pp.FullName AS PrimaryContact, ap.FullName AS AlternateContact, s.PhoneNumber, s.FaxNumber, bg.BuyingGroupName, s.WebsiteURL, dm.DeliveryMethodName AS DeliveryMethod , c.CityName AS CityName, s.DeliveryLocation AS DeliveryLocation, s.DeliveryRun, s.RunPositionFROM Sales.Customers AS sLEFT OUTER JOIN Sales.CustomerCategories AS scON s.CustomerCategoryID =sc.CustomerCategoryIDLEFT OUTER JOIN [Application].Personnes AS ppON s. PrimaryContactPersonID =pp.PersonIDLEFT OUTER JOIN [Application].People AS apON s.AlternateContactPersonID =ap.PersonIDLEFT OUTER JOIN Sales.BuyingGroups AS bgON s.BuyingGroupID =bg.BuyingGroupIDLEFT OUTER JOIN [Application].DeliveryMethods AS dmON s.DeliveryMethodID =dm. DeliveryMethodIDLEFT OUTER JOIN [Application].Cities AS cON s.DeliveryCityID =c.CityID |+--------------+
Cette fois, c'est plus facile à lire dans ma CLI que dans ma grille GUI.
Exemple 4 - La vue de schéma d'informations système VIEWS
Les VIEWS
La vue de schéma d'informations système peut également renvoyer la définition d'une vue. Une différence entre cette méthode et les précédentes est que les VIEWS
La vue du schéma d'informations est limitée aux vues (comme son nom l'indique).
Il renvoie un ensemble de colonnes, dont l'une est la définition de la vue. Par conséquent, nous pouvons nommer cette colonne pour renvoyer uniquement la définition :
SELECT VIEW_DEFINITIONFROM INFORMATION_SCHEMA.VIEWSWHERE TABLE_NAME ='Clients' ;
Résultat :
+-------------------+| VIEW_DEFINITION ||-------------------|| CRÉER UNE VUE Website.CustomersASSELECT s.CustomerID, s.CustomerName, sc.CustomerCategoryName, pp.FullName AS PrimaryContact, ap.FullName AS AlternateContact, s.PhoneNumber, s.FaxNumber, bg.BuyingGroupName, s.WebsiteURL, dm.DeliveryMethodName AS DeliveryMethod , c.CityName AS CityName, s.DeliveryLocation AS DeliveryLocation, s.DeliveryRun, s.RunPositionFROM Sales.Customers AS sLEFT OUTER JOIN Sales.CustomerCategories AS scON s.CustomerCategoryID =sc.CustomerCategoryIDLEFT OUTER JOIN [Application].Personnes AS ppON s. PrimaryContactPersonID =pp.PersonIDLEFT OUTER JOIN [Application].People AS apON s.AlternateContactPersonID =ap.PersonIDLEFT OUTER JOIN Sales.BuyingGroups AS bgON s.BuyingGroupID =bg.BuyingGroupIDLEFT OUTER JOIN [Application].DeliveryMethods AS dmON s.DeliveryMethodID =dm. DeliveryMethodIDLEFT OUTER JOIN [Application].Cities AS cON s.DeliveryCityID =c.CityID |+-------------------+Notez que le
VIEW_DEFINITION
colonne dans cette vue système a une longueur maximale de nvarchar(4000) . Pour les définitions de vue plus grandes que cela, vous pouvez utiliser leOBJECT_DEFINITION()
fonction dans l'exemple précédent.La valeur de retour de
OBJECT_DEFINITION()
la fonction est nvarchar(max) , il n'a donc pas la limitation de caractères duVIEW_DEFINITION
colonne (qui, comme mentionné, est nvarchar(4000) ).