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

4 modi per ottenere la definizione di una vista utilizzando Transact-SQL

Questo articolo presenta 4 modi per utilizzare T-SQL per ottenere la definizione di una vista in SQL Server.

La definizione della vista è l'effettiva istruzione T-SQL utilizzata per creare la vista.

Esempio 1 – La vista del catalogo di sistema sys.sql_modules

I sys.sql_modules la visualizzazione del catalogo di sistema restituisce una riga per ogni oggetto che è un modulo definito dal linguaggio SQL in SQL Server.

In altre parole, puoi utilizzare questa vista per restituire informazioni su oggetti di vario tipo, incluse funzioni, procedure memorizzate e, naturalmente, viste.

Una delle colonne restituite con questa vista è chiamata definition . Come suggerisce il nome, restituisce la definizione dell'oggetto.

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

Risultato:

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

Ho usato un'interfaccia a riga di comando (CLI) con questo esempio, quindi il risultato è ben formattato.

Se si usa una GUI (come SSMS o Azure Data Studio) per restituire i risultati in una griglia, è probabile che la definizione venga restituita in una riga lunga in una singola cella. In questi casi dovrai fare del lavoro extra se vuoi che venga visualizzato in un formato più leggibile. In alternativa, puoi usare il sp_helptext metodo di seguito.

Esempio 2:la stored procedure di sistema sp_helptext

Un altro metodo per restituire la definizione di una vista consiste nell'usare sp_helptext procedura memorizzata di sistema. Oltre a restituire la definizione per una vista, può anche restituire la definizione di una regola definita dall'utente, una stored procedure T-SQL predefinita non crittografata, una funzione Transact-SQL definita dall'utente, un trigger, una colonna calcolata, CHECK vincolo o un oggetto di sistema come una procedura memorizzata di sistema.

Come accennato nell'esempio precedente, questa stored procedure visualizza la definizione della vista su più righe. Ogni riga contiene 255 caratteri della definizione T-SQL.

Esempio:

EXEC sp_helptext 'Website.Customers';

Ecco il risultato che ottengo quando utilizzo una GUI (Azure Data Studio):

Ed ecco cosa ottengo usando la mia interfaccia a riga di comando:

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

Questa volta i risultati sembrano migliori quando si utilizza la GUI.

Esempio 3 – La funzione OBJECT_DEFINITION()

Un altro modo per restituire la definizione di una vista è utilizzare OBJECT_DEFINITION() funzione. Come con i metodi precedenti, anche questo metodo può restituire la definizione di altri tipi di oggetti.

Ecco un esempio di utilizzo di questa funzione:

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

Risultato:

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

Questa volta è più facile leggere nella mia CLI che nella mia griglia della GUI.

Esempio 4 – Visualizzazione dello schema delle informazioni di sistema VIEWS

Le VIEWS La vista dello schema delle informazioni di sistema può anche restituire la definizione di una vista. Una differenza tra questo metodo e i precedenti è che VIEWS la visualizzazione dello schema di informazioni è limitata alle sole visualizzazioni (come suggerisce il nome).

Restituisce un gruppo di colonne, una delle quali è la definizione della vista. Pertanto possiamo nominare quella colonna per restituire solo la definizione:

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

Risultato:

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

Nota che il VIEW_DEFINITION la colonna in questa vista di sistema ha una lunghezza massima di nvarchar(4000) . Per definizioni di viste più grandi di questa, puoi usare OBJECT_DEFINITION() funzione nell'esempio precedente.

Il valore restituito di OBJECT_DEFINITION() la funzione è nvarchar(max) , quindi non ha il limite di caratteri di VIEW_DEFINITION colonna (che, come accennato, è nvarchar(4000) ).