Dit artikel presenteert 4 manieren om T-SQL te gebruiken om de definitie van een weergave in SQL Server te krijgen.
De weergavedefinitie is de feitelijke T-SQL-instructie die wordt gebruikt om de weergave te maken.
Voorbeeld 1 – De systeemcatalogusweergave sys.sql_modules
De sys.sql_modules
systeemcatalogusweergave retourneert een rij voor elk object dat een SQL-taalgedefinieerde module in SQL Server is.
Met andere woorden, u kunt deze weergave gebruiken om informatie te retourneren over objecten van verschillende typen, inclusief functies, opgeslagen procedures en natuurlijk weergaven.
Een van de kolommen die met deze weergave worden geretourneerd, heet definition
. Zoals de naam al aangeeft, geeft dit de definitie van het object terug.
SELECT definition FROM sys.sql_modules WHERE object_id = object_id('Website.Customers');
Resultaat:
+--------------+ | definition | |--------------| | CREATE VIEW Website.Customers AS SELECT 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.RunPosition FROM Sales.Customers 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].People AS ap ON s.AlternateContactPersonID = ap.PersonID LEFT OUTER JOIN 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].Cities AS c ON s.DeliveryCityID = c.CityID | +--------------+ (1 row affected)
Ik heb bij dit voorbeeld een opdrachtregelinterface (CLI) gebruikt, dus het resultaat is mooi opgemaakt.
Als u een GUI (zoals SSMS of Azure Data Studio) gebruikt om de resultaten in een raster te retourneren, wordt de definitie waarschijnlijk in één lange regel in één cel geretourneerd. In dergelijke gevallen moet u wat extra werk doen als u wilt dat het in een beter leesbaar formaat wordt weergegeven. Als alternatief kunt u de sp_helptext
. gebruiken methode hieronder.
Voorbeeld 2 – De sp_helptext systeem opgeslagen procedure
Een andere methode om de definitie van een weergave te retourneren, is door de sp_helptext
. te gebruiken systeem opgeslagen procedure. Naast het retourneren van de definitie voor een weergave, kan het ook de definitie retourneren van een door de gebruiker gedefinieerde regel, standaard, niet-versleutelde T-SQL opgeslagen procedure, door de gebruiker gedefinieerde Transact-SQL-functie, trigger, berekende kolom, CHECK
beperking of systeemobject zoals een door het systeem opgeslagen procedure.
Zoals vermeld in het vorige voorbeeld, geeft deze opgeslagen procedure de definitie van de weergave weer over meerdere rijen. Elke rij bevat 255 tekens van de T-SQL-definitie.
Voorbeeld:
EXEC sp_helptext 'Website.Customers';
Dit is het resultaat dat ik krijg als ik een GUI (Azure Data Studio) gebruik:
En dit is wat ik krijg met mijn opdrachtregelinterface:
+--------+ | Text | |--------| | | | CREATE VIEW Website.Customers | | AS | | SELECT 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.RunPosition | | FROM Sales.Customers 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].People AS ap | | ON s.AlternateContactPersonID = ap.PersonID | | LEFT OUTER JOIN 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].Cities AS c | | ON s.DeliveryCityID = c.CityID | +--------+
Deze keer zien de resultaten er beter uit bij gebruik van de GUI.
Voorbeeld 3 – De OBJECT_DEFINITION() Functie
Een andere manier om de definitie van een weergave te retourneren, is door de OBJECT_DEFINITION()
te gebruiken functie. Net als bij de vorige methoden, kan deze methode ook de definitie van andere objecttypen retourneren.
Hier is een voorbeeld van het gebruik van deze functie:
SELECT OBJECT_DEFINITION( OBJECT_ID('Website.Customers') ) AS [Definition];
Resultaat:
+--------------+ | Definition | |--------------| | CREATE VIEW Website.Customers AS SELECT 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.RunPosition FROM Sales.Customers 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].People AS ap ON s.AlternateContactPersonID = ap.PersonID LEFT OUTER JOIN 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].Cities AS c ON s.DeliveryCityID = c.CityID | +--------------+
Deze keer is het gemakkelijker te lezen in mijn CLI dan in mijn GUI-raster.
Voorbeeld 4 – De weergave van het VIEWS-systeeminformatieschema
De VIEWS
systeeminformatieschemaweergave kan ook de definitie van een weergave retourneren. Een verschil tussen deze methode en de vorige is dat de VIEWS
informatieschemaweergave is beperkt tot alleen weergaven (zoals de naam al aangeeft).
Het retourneert een aantal kolommen, waaronder de definitie van de weergave. Daarom kunnen we die kolom een naam geven om alleen de definitie terug te geven:
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'Customers';
Resultaat:
+-------------------+ | VIEW_DEFINITION | |-------------------| | CREATE VIEW Website.Customers AS SELECT 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.RunPosition FROM Sales.Customers 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].People AS ap ON s.AlternateContactPersonID = ap.PersonID LEFT OUTER JOIN 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].Cities AS c ON s.DeliveryCityID = c.CityID | +-------------------+
Merk op dat de VIEW_DEFINITION
kolom in deze systeemweergave heeft een maximale lengte van nvarchar(4000) . Voor grotere weergavedefinities kunt u de OBJECT_DEFINITION()
gebruiken functie in het vorige voorbeeld.
De geretourneerde waarde van OBJECT_DEFINITION()
functie is nvarchar(max) , dus het heeft niet de tekenbeperking van de VIEW_DEFINITION
kolom (die, zoals vermeld, nvarchar(4000) . is ).