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

4 Möglichkeiten zum Abrufen der Definition einer Ansicht mit Transact-SQL

Dieser Artikel stellt 4 Möglichkeiten zur Verwendung von T-SQL vor, um die Definition einer Ansicht in SQL Server abzurufen.

Die Ansichtsdefinition ist die eigentliche T-SQL-Anweisung, die zum Erstellen der Ansicht verwendet wird.

Beispiel 1 – Die Systemkatalogansicht sys.sql_modules

Die sys.sql_modules Die Systemkatalogansicht gibt eine Zeile für jedes Objekt zurück, das ein in der SQL-Sprache definiertes Modul in SQL Server ist.

Mit anderen Worten, Sie können diese Ansicht verwenden, um Informationen über Objekte verschiedener Typen zurückzugeben, darunter Funktionen, gespeicherte Prozeduren und natürlich Ansichten.

Eine der mit dieser Ansicht zurückgegebenen Spalten heißt definition . Wie der Name schon sagt, gibt dies die Definition des Objekts zurück.

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

Ergebnis:

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

Ich habe in diesem Beispiel eine Befehlszeilenschnittstelle (CLI) verwendet, daher ist das Ergebnis schön formatiert.

Wenn Sie eine GUI (z. B. SSMS oder Azure Data Studio) verwenden, um die Ergebnisse in einem Raster zurückzugeben, wird die Definition wahrscheinlich in einer langen Zeile in einer einzelnen Zelle zurückgegeben. In solchen Fällen müssen Sie zusätzliche Arbeit leisten, wenn Sie möchten, dass es in einem besser lesbaren Format angezeigt wird. Alternativ könnten Sie den sp_helptext verwenden Methode unten.

Beispiel 2 – Die gespeicherte Systemprozedur sp_helptext

Eine andere Methode zur Rückgabe der Definition einer Ansicht ist die Verwendung von sp_helptext System gespeicherte Prozedur. Es kann nicht nur die Definition für eine Ansicht zurückgeben, sondern auch die Definition einer benutzerdefinierten Regel, einer standardmäßigen, unverschlüsselten gespeicherten T-SQL-Prozedur, einer benutzerdefinierten Transact-SQL-Funktion, eines Triggers, einer berechneten Spalte, CHECK Einschränkung oder Systemobjekt wie eine gespeicherte Systemprozedur.

Wie im vorherigen Beispiel erwähnt, zeigt diese gespeicherte Prozedur die Definition der Ansicht über mehrere Zeilen hinweg an. Jede Zeile enthält 255 Zeichen der T-SQL-Definition.

Beispiel:

EXEC sp_helptext 'Website.Customers';

Hier ist das Ergebnis, das ich erhalte, wenn ich eine GUI (Azure Data Studio) verwende:

Und hier ist, was ich über meine Befehlszeilenschnittstelle bekomme:

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

Diesmal sehen die Ergebnisse bei Verwendung der GUI besser aus.

Beispiel 3 – Die Funktion OBJECT_DEFINITION()

Eine andere Möglichkeit, die Definition einer Ansicht zurückzugeben, ist die Verwendung von OBJECT_DEFINITION() Funktion. Wie bei den vorherigen Methoden kann auch diese Methode die Definition anderer Objekttypen zurückgeben.

Hier ist ein Beispiel für die Verwendung dieser Funktion:

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

Ergebnis:

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

Diesmal ist es in meiner CLI einfacher zu lesen als in meinem GUI-Raster.

Beispiel 4 – Die VIEWS-Systeminformationsschemaansicht

Die VIEWS Die Systeminformationsschemaansicht kann auch die Definition einer Ansicht zurückgeben. Ein Unterschied zwischen dieser Methode und den vorherigen besteht darin, dass die VIEWS Die Ansicht des Informationsschemas ist auf Ansichten beschränkt (wie der Name schon sagt).

Es gibt eine Reihe von Spalten zurück, von denen eine die Definition der Ansicht ist. Daher können wir diese Spalte benennen, um nur die Definition zurückzugeben:

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

Ergebnis:

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

Beachten Sie, dass die VIEW_DEFINITION Spalte in dieser Systemansicht hat eine maximale Länge von nvarchar(4000) . Für größere Ansichtsdefinitionen können Sie OBJECT_DEFINITION() verwenden Funktion im vorherigen Beispiel.

Der Rückgabewert von OBJECT_DEFINITION() Funktion ist nvarchar(max) , hat also nicht die Zeichenbeschränkung der VIEW_DEFINITION Spalte (die wie erwähnt nvarchar(4000) ist). ).