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