Database
 sql >> Baza danych >  >> RDS >> Database

4 sposoby na uzyskanie definicji widoku za pomocą języka Transact-SQL

W tym artykule przedstawiono 4 sposoby wykorzystania T-SQL do uzyskania definicji widoku w SQL Server.

Definicja widoku to rzeczywista instrukcja T-SQL używana do tworzenia widoku.

Przykład 1 – Widok katalogu systemu sys.sql_modules

sys.sql_modules widok katalogu systemowego zwraca wiersz dla każdego obiektu, który jest modułem zdefiniowanym w języku SQL w SQL Server.

Innymi słowy, możesz użyć tego widoku do zwrócenia informacji o obiektach różnych typów, w tym o funkcjach, procedurach składowanych i oczywiście widokach.

Jedna z kolumn zwracanych z tym widokiem nazywa się definicja . Jak sama nazwa wskazuje, zwraca definicję obiektu.

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

Wynik:

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

W tym przykładzie użyłem interfejsu wiersza poleceń (CLI), więc wynik jest dobrze sformatowany.

Jeśli używasz graficznego interfejsu użytkownika (takiego jak SSMS lub Azure Data Studio), aby zwrócić wyniki w siatce, definicja prawdopodobnie zostanie zwrócona w jednym długim wierszu w jednej komórce. W takich przypadkach będziesz musiał wykonać dodatkową pracę, jeśli chcesz, aby wyświetlał się w bardziej czytelnym formacie. Alternatywnie możesz użyć sp_helptext metoda poniżej.

Przykład 2 – Procedura przechowywana w systemie sp_helptext

Inną metodą zwracania definicji widoku jest użycie sp_helptext systemowa procedura składowana. Oprócz zwrócenia definicji widoku może również zwrócić definicję reguły zdefiniowanej przez użytkownika, domyślnej, niezaszyfrowanej procedury składowanej T-SQL, zdefiniowanej przez użytkownika funkcji Transact-SQL, wyzwalacza, kolumny wyliczanej, SPRAWDZ ograniczenie lub obiekt systemowy, taki jak systemowa procedura składowana.

Jak wspomniano w poprzednim przykładzie, ta procedura składowana wyświetla definicję widoku w wielu wierszach. Każdy wiersz zawiera 255 znaków definicji T-SQL.

Przykład:

EXEC sp_helptext 'Website.Customers';

Oto wynik, który otrzymuję podczas korzystania z GUI (Azure Data Studio):

A oto, co otrzymuję za pomocą interfejsu wiersza poleceń:

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

Tym razem wyniki wyglądają lepiej podczas korzystania z GUI.

Przykład 3 – Funkcja OBJECT_DEFINITION()

Innym sposobem na zwrócenie definicji widoku jest użycie OBJECT_DEFINITION() funkcjonować. Podobnie jak w przypadku poprzednich metod, ta metoda może również zwrócić definicję innych typów obiektów.

Oto przykład użycia tej funkcji:

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

Wynik:

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

Tym razem łatwiej jest czytać w moim CLI niż w siatce GUI.

Przykład 4 – Widok schematu informacji o systemie WIDOKÓW

WIDOKÓW Widok schematu informacji o systemie może również zwracać definicję widoku. Jedną z różnic między tą metodą a poprzednimi jest to, że WIDOKÓW Widok schematu informacji jest ograniczony tylko do widoków (jak sama nazwa wskazuje).

Zwraca kilka kolumn, z których jedna to definicja widoku. Dlatego możemy nazwać tę kolumnę, aby zwrócić tylko definicję:

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

Wynik:

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

Zauważ, że VIEW_DEFINITION kolumna w tym widoku systemowym ma maksymalną długość nvarchar(4000) . W przypadku definicji widoków większych niż ta, możesz użyć OBJECT_DEFINITION() funkcji w poprzednim przykładzie.

Zwracana wartość OBJECT_DEFINITION() funkcja to nvarchar(max) , więc nie ma ograniczenia znaków VIEW_DEFINITION kolumna (która, jak wspomniano, to nvarchar(4000) ).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Co to jest indeks w SQL?

  2. Tworzenie nowych tabel w IRI Workbench

  3. Model danych na temat imprezy dla dzieci

  4. Identyfikowanie i naprawianie problemu z wydajnością przekazanych rekordów

  5. Jak zresetować hasło użytkownika głównego Amazon RDS