sql >> Database teknologi >  >> RDS >> Database

4 måder at få en visningsdefinition ved hjælp af Transact-SQL

Denne artikel præsenterer 4 måder at bruge T-SQL til at få definitionen af ​​en visning i SQL Server.

Visningsdefinitionen er den faktiske T-SQL-sætning, der bruges til at oprette visningen.

Eksempel 1 – Sys.sql_modules systemkatalogvisning

sys.sql_modules systemkatalogvisning returnerer en række for hvert objekt, der er et SQL-sprogdefineret modul i SQL Server.

Med andre ord kan du bruge denne visning til at returnere information om objekter af forskellige typer, herunder funktioner, lagrede procedurer og selvfølgelig visninger.

En af kolonnerne, der returneres med denne visning, kaldes definition . Som navnet antyder, returnerer dette objektets definition.

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)

Jeg brugte en kommandolinjegrænseflade (CLI) med dette eksempel, så resultatet er pænt formateret.

Hvis du bruger en GUI (såsom SSMS eller Azure Data Studio) til at returnere resultaterne i et gitter, vil definitionen sandsynligvis blive returneret i en lang linje i en enkelt celle. I sådanne tilfælde bliver du nødt til at gøre noget ekstra arbejde, hvis du vil have det vist i et mere læsbart format. Alternativt kan du bruge sp_helptext metode nedenfor.

Eksempel 2 – Sp_helptext-systemets lagrede procedure

En anden metode til at returnere en visnings definition er at bruge sp_helptext system lagret procedure. Ud over at returnere definitionen for en visning, kan den også returnere definitionen af ​​en brugerdefineret regel, standard, ukrypteret T-SQL lagret procedure, brugerdefineret Transact-SQL funktion, trigger, beregnet kolonne, CHECK begrænsning eller systemobjekt såsom en systemlagret procedure.

Som nævnt i det foregående eksempel viser denne lagrede procedure visningens definition på tværs af flere rækker. Hver række indeholder 255 tegn i T-SQL-definitionen.

Eksempel:

EXEC sp_helptext 'Website.Customers';

Her er resultatet, jeg får, når jeg bruger en GUI (Azure Data Studio):

Og her er, hvad jeg får ved at bruge min kommandolinjegrænseflade:

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

Denne gang ser resultaterne bedre ud, når du bruger GUI.

Eksempel 3 – OBJECT_DEFINITION()-funktionen

En anden måde at returnere en visnings definition på er at bruge OBJECT_DEFINITION() fungere. Som med de tidligere metoder kan denne metode også returnere definitionen af ​​andre objekttyper.

Her er et eksempel på brug af denne funktion:

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

Denne gang er det nemmere at læse i mit CLI end mit GUI-gitter.

Eksempel 4 – VIEWS System Information Schema View

VIEWS systeminformationsskemavisning kan også returnere en visnings definition. En forskel mellem denne metode og de tidligere er, at VIEWS informationsskemavisning er begrænset til kun visninger (som navnet antyder).

Det returnerer en masse kolonner, hvoraf den ene er visningens definition. Derfor kan vi navngive den kolonne for kun at returnere 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
                   |
+-------------------+

Bemærk, at VIEW_DEFINITION kolonne i denne systemvisning har en maksimal længde på nvarchar(4000) . For visningsdefinitioner, der er større end dette, kan du bruge OBJECT_DEFINITION() funktion i det foregående eksempel.

Returværdien for OBJECT_DEFINITION() funktionen er nvarchar(max) , så den har ikke tegnbegrænsningen for VIEW_DEFINITION kolonne (som som nævnt er nvarchar(4000) ).


  1. Hvordan gemmer man arrays i MySQL?

  2. JavaFX MySQL-forbindelseseksempel tak

  3. PostgreSQL 12:Fremmednøgler og opdelte tabeller

  4. Oracle sammenligner tidsstempel med dato