Тази статия представя 4 начина за използване на T-SQL за получаване на дефиницията на изглед в SQL Server.
Дефиницията на изгледа е действителният израз на T-SQL, използван за създаване на изгледа.
Пример 1 – Изгледът на системния каталог sys.sql_modules
sys.sql_modules
Изгледът на системния каталог връща ред за всеки обект, който е модул, дефиниран от SQL език в SQL Server.
С други думи, можете да използвате този изглед, за да върнете информация за обекти от различни типове, включително функции, съхранени процедури и, разбира се, изгледи.
Една от колоните, върнати с този изглед, се нарича definition
. Както подсказва името, това връща дефиницията на обекта.
SELECT definitionFROM sys.sql_modulesWHERE object_id =object_id('Website.Customers');
Резултат:
+--------------+| определение ||--------------|| CREATE VIEW Website.CustomersASSELECT s.CustomerID, s.CustomerName, sc.CustomerCategoryName, pp.FullName AS PrimaryContact, ap.FullName AS AlternateContact, s.PhoneNumber, s.FaxNumber, s.FaxNumber, s.FaxNumber, s.FaxNumber, s.FaxNumber, s.FaxNumber, s.FaxNumber, s.FaxNumber. , c.CityName КАТО CityName, s.DeliveryLocation КАТО DeliveryLocation, s.DeliveryRun, s.RunPositionFROM Sales.Customers КАТО SLEFT OUTER JOIN Sales.CustomerCategories AS scON s.CustomerCategoryID =sc.CustomerCategoryID =sc.CustomerCategoryID sc.CustomerCategoryID sc.CustomerCategoryApp. PrimaryContactPersonID =pp.PersonIDLEFT OUTER JOIN [Application].People AS apON s.AlternateContactPersonID =ap.PersonIDLEFT OUTER JOIN Sales.BuyingGroups КАТО bgON s.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID s. DeliveryMethodIDLEFT OUTER JOIN [Application].Cities AS con s.DeliveryCityID =c.CityID |+--------------+(1 row affe цитирано)
Използвах интерфейс на командния ред (CLI) с този пример, така че резултатът е добре форматиран.
Ако използвате GUI (като SSMS или Azure Data Studio), за да върнете резултатите в мрежа, дефиницията вероятно ще бъде върната в един дълъг ред в една клетка. В такива случаи ще трябва да свършите допълнителна работа, ако искате да се показва в по-четлив формат. Като алтернатива можете да използвате sp_helptext
метод по-долу.
Пример 2 – Системната запаметена процедура sp_helptext
Друг метод за връщане на дефиницията на изглед е използването на sp_helptext
системна съхранена процедура. Освен че връща дефиницията за изглед, той може също така да върне дефиницията на дефинирано от потребителя правило, по подразбиране, нешифрована T-SQL съхранена процедура, дефинирана от потребителя Transact-SQL функция, тригер, изчислена колона, CHECKкод> ограничение или системен обект, като например системна съхранена процедура.
Както бе споменато в предишния пример, тази съхранена процедура показва дефиницията на изгледа в множество редове. Всеки ред съдържа 255 знака от дефиницията на T-SQL.
Пример:
EXEC sp_helptext 'Уебсайт.Клиенти';
Ето резултата, който получавам, когато използвам GUI (Azure Data Studio):
И ето какво получавам с моя интерфейс на командния ред:
+--------+| Текст ||--------|| || СЪЗДАВАНЕ НА ИЗГЛЕД Уебсайт.Клиенти || КАТО || ИЗБЕРЕТЕ s.CustomerID, || s.Име на клиента, || sc.CustomerCategoryName, || pp.FullName AS PrimaryContact, || ap.FullName AS AlternateContact, || s.Телефонен номер, || s.FaxNumber, || bg.BuyingGroupName, || s.URL на уебсайта, || dm.DeliveryMethodName AS Метод на доставка, || c.CityName AS Име на град, || s.DeliveryLocation AS Местоположение на доставка, || s.DeliveryRun, || s.RunPosition || ОТ 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 [Приложение]. Хора КАТО 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 [Приложение].Cities AS c || ON s.DeliveryCityID =c.CityID |+--------+
Този път резултатите изглеждат по-добре при използване на GUI.
Пример 3 – Функцията OBJECT_DEFINITION()
Друг начин да върнете дефиницията на изглед е да използвате OBJECT_DEFINITION()
функция. Както при предишните методи, този метод може също да върне дефиницията на други типове обекти.
Ето пример за използване на тази функция:
SELECT OBJECT_DEFINITION( OBJECT_ID('Уебсайт.Клиенти') ) КАТО [Дефиниция];
Резултат:
+--------------+| Определение ||--------------|| CREATE VIEW Website.CustomersASSELECT s.CustomerID, s.CustomerName, sc.CustomerCategoryName, pp.FullName AS PrimaryContact, ap.FullName AS AlternateContact, s.PhoneNumber, s.FaxNumber, s.FaxNumber, s.FaxNumber, s.FaxNumber, s.FaxNumber, s.FaxNumber, s.FaxNumber, s.FaxNumber. , c.CityName КАТО CityName, s.DeliveryLocation КАТО DeliveryLocation, s.DeliveryRun, s.RunPositionFROM Sales.Customers КАТО SLEFT OUTER JOIN Sales.CustomerCategories AS scON s.CustomerCategoryID =sc.CustomerCategoryID =sc.CustomerCategoryID sc.CustomerCategoryID sc.CustomerCategoryApp. PrimaryContactPersonID =pp.PersonIDLEFT OUTER JOIN [Application].People AS apON s.AlternateContactPersonID =ap.PersonIDLEFT OUTER JOIN Sales.BuyingGroups КАТО bgON s.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID s. DeliveryMethodIDLEFT OUTER JOIN [Application].Cities AS con s.DeliveryCityID =c.CityID |+--------------+
Този път е по-лесно за четене в моя CLI, отколкото в моята GUI мрежа.
Пример 4 – Изгледът на схемата за информация за системата VIEWS
VIEWS
Изгледът на схемата за системна информация може също да върне дефиницията на изглед. Една разлика между този метод и предишните е, че VIEWS
Изгледът на информационната схема е ограничен само до изгледи (както подсказва името).
Връща куп колони, една от които е дефиницията на изгледа. Следователно можем да назовем тази колона, за да върнем само дефиницията:
SELECT VIEW_DEFINITIONFROM INFORMATION_SCHEMA.VIEWSWHERE TABLE_NAME ='Клиенти';
Резултат:
+------------------+| ПРЕГЛЕД_ДЕФИНИЦИЯ ||-------------------|| CREATE VIEW Website.CustomersASSELECT s.CustomerID, s.CustomerName, sc.CustomerCategoryName, pp.FullName AS PrimaryContact, ap.FullName AS AlternateContact, s.PhoneNumber, s.FaxNumber, s.FaxNumber, s.FaxNumber, s.FaxNumber, s.FaxNumber, s.FaxNumber, s.FaxNumber, s.FaxNumber. , c.CityName КАТО CityName, s.DeliveryLocation КАТО DeliveryLocation, s.DeliveryRun, s.RunPositionFROM Sales.Customers КАТО SLEFT OUTER JOIN Sales.CustomerCategories AS scON s.CustomerCategoryID =sc.CustomerCategoryID =sc.CustomerCategoryID sc.CustomerCategoryID sc.CustomerCategoryApp. PrimaryContactPersonID =pp.PersonIDLEFT OUTER JOIN [Application].People AS apON s.AlternateContactPersonID =ap.PersonIDLEFT OUTER JOIN Sales.BuyingGroups КАТО bgON s.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID =bg.BuyingGroupID s. DeliveryMethodIDLEFT OUTER JOIN [Application].Cities AS con s.DeliveryCityID =c.CityID |+-------------------+предварително>Имайте предвид, че
VIEW_DEFINITION
колоната в този системен изглед има максимална дължина от nvarchar(4000) . За дефиниции на изглед, по-големи от това, можете да използватеOBJECT_DEFINITION()
функция в предишния пример.Връщаната стойност на
OBJECT_DEFINITION()
функцията е nvarchar(max) , така че няма ограничението за знаци наVIEW_DEFINITION
колона (която, както споменахме, е nvarchar(4000) ).