sql >> Databasteknik >  >> RDS >> Database

4 sätt att få en vys definition med Transact-SQL

Den här artikeln presenterar fyra sätt att använda T-SQL för att få definitionen av en vy i SQL Server.

Vydefinitionen är den faktiska T-SQL-satsen som används för att skapa vyn.

Exempel 1 – Sys.sql_modules systemkatalogvy

sys.sql_modules systemkatalogvyn returnerar en rad för varje objekt som är en SQL-språkdefinierad modul i SQL Server.

Med andra ord kan du använda denna vy för att returnera information om objekt av olika typer, inklusive funktioner, lagrade procedurer och naturligtvis vyer.

En av kolumnerna som returneras med denna vy kallas definition . Som namnet antyder returnerar detta definitionen av objektet.

SELECT definition
FROM sys.sql_modules
WHERE object_id = object_id('Website.Customers');

Resultat:

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

Jag använde ett kommandoradsgränssnitt (CLI) med det här exemplet, så resultatet är snyggt formaterat.

Om du använder ett GUI (som SSMS eller Azure Data Studio) för att returnera resultaten i ett rutnät, kommer definitionen troligen att returneras i en lång rad i en enda cell. I sådana fall måste du göra lite extra arbete om du vill att det ska visas i ett mer läsbart format. Alternativt kan du använda sp_helptext metod nedan.

Exempel 2 – Sp_helptext-systemets lagrade procedur

En annan metod för att returnera en vys definition är att använda sp_hjälptext systemlagrad procedur. Förutom att returnera definitionen för en vy, kan den också returnera definitionen av en användardefinierad regel, standard, okrypterad T-SQL lagrad procedur, användardefinierad Transact-SQL funktion, trigger, beräknad kolumn, CHECK begränsning, eller systemobjekt såsom en systemlagrad procedur.

Som nämnts i föregående exempel visar denna lagrade procedur vyns definition över flera rader. Varje rad innehåller 255 tecken i T-SQL-definitionen.

Exempel:

EXEC sp_helptext 'Website.Customers';

Här är resultatet jag får när jag använder ett GUI (Azure Data Studio):

Och här är vad jag får med mitt kommandoradsgränssnitt:

+--------+
| 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
        |
+--------+

Den här gången ser resultaten bättre ut när du använder GUI.

Exempel 3 – OBJECT_DEFINITION()-funktionen

Ett annat sätt att returnera en vys definition är att använda OBJECT_DEFINITION() fungera. Som med de tidigare metoderna kan denna metod även returnera definitionen av andra objekttyper.

Här är ett exempel på hur du använder den här funktionen:

SELECT OBJECT_DEFINITION(
        OBJECT_ID('Website.Customers')
    ) AS [Definition];

Resultat:

+--------------+
| 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
              |
+--------------+

Den här gången är det lättare att läsa i min CLI än mitt GUI-rutnät.

Exempel 4 – Systeminformationsschemavyn för VIEWS

VISNINGAR systeminformationsschemavy kan också returnera en vys definition. En skillnad mellan den här metoden och de tidigare är att VIEWS informationsschemavyn är begränsad till bara vyer (som namnet antyder).

Det returnerar ett gäng kolumner, varav en är vyns definition. Därför kan vi namnge den kolumnen för att bara returnera definitionen:

SELECT VIEW_DEFINITION
FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME = 'Customers';

Resultat:

+-------------------+
| 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
                   |
+-------------------+

Observera att VIEW_DEFINITION kolumnen i denna systemvy har en maximal längd på nvarchar(4000) . För vydefinitioner större än detta kan du använda OBJECT_DEFINITION() funktion i föregående exempel.

Returvärdet för OBJECT_DEFINITION() funktionen är nvarchar(max) , så den har inte teckenbegränsningen för VIEW_DEFINITION kolumn (som som nämnts är nvarchar(4000) ).


  1. Hur SECOND() fungerar i MariaDB

  2. SQL Server Interns:Problematiska operatörer Pt. II – Hashing

  3. Öppna SQLite-frågeresultat automatiskt i Excel

  4. Förbättra partitionsunderhåll med inkrementell statistik