sql >> Database >  >> RDS >> Database

4 manieren om de definitie van een weergave te krijgen met Transact-SQL

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 ).


  1. Hoe de leeftijd vanaf de geboortedatum in SQL te berekenen

  2. Ontdek op welk besturingssysteem SQL Server wordt uitgevoerd (T-SQL-voorbeeld)

  3. 4 manieren om rijen met kleine letters te vinden in Oracle

  4. ResultSet#getDate() semantiek