Tento článek představuje 4 způsoby použití T-SQL k získání definice pohledu na SQL Server.
Definice pohledu je skutečný příkaz T-SQL použitý k vytvoření pohledu.
Příklad 1 – Zobrazení katalogu systému sys.sql_modules
Soubor sys.sql_modules
zobrazení systémového katalogu vrátí řádek pro každý objekt, který je modulem definovaným jazykem SQL na serveru SQL.
Jinými slovy, toto zobrazení můžete použít k vrácení informací o objektech různých typů, včetně funkcí, uložených procedur a samozřejmě pohledů.
Jeden ze sloupců vrácených tímto pohledem se nazývá definition
. Jak název napovídá, vrátí definici objektu.
SELECT definitionFROM sys.sql_modulesWHERE object_id =object_id('Website.Customers');
Výsledek:
+---------------+| definice ||---------------|| CREATE VIEW Website.CustomersASSELECT s.CustomerID, s.CustomerName, sc.CustomerCategoryName, pp.FullName AS PrimaryContact, ap.FullName AS AlternateContact, s.PhoneNumber, s.FaxNumber, s.FaxNumber, bgdme AShod.WebM Delivery, sc.CustomerCategoryName. , c.CityName AS Název města, s.DeliveryLocation AS DeliveryLocation, s.DeliveryRun, s.RunPositionFROM Sales.Customers AS SLEFT OUTER JOIN Sales.CustomerCategories AS scON s.CustomerCategoryID =sc.CustomerFTOUTEREgoryINpleOIDLE] PrimaryContactPersonID =pp.PersonIDLEFT VNĚJŠÍ PŘIPOJENÍ [Aplikace].Lidé JAKO apON s.AlternateContactPersonID =ap.PersonIDLEFT OUTER JOIN Sales.BuyingGroups AS bgON s.DemetIDGroupID =bg.BuyingetIDhodlivGroupM DeliveryMethodIDLEFT OUTER JOIN [Aplikace].Cities AS con s.DeliveryCityID =c.CityID |+--------------+(1 řádek affe cted)
V tomto příkladu jsem použil rozhraní příkazového řádku (CLI), takže výsledek je pěkně naformátovaný.
Pokud k vrácení výsledků v mřížce použijete grafické uživatelské rozhraní (například SSMS nebo Azure Data Studio), bude definice pravděpodobně vrácena v jednom dlouhém řádku v jedné buňce. V takových případech budete muset udělat nějakou práci navíc, pokud chcete, aby se zobrazoval v čitelnějším formátu. Případně můžete použít sp_helptext
níže.
Příklad 2 – Systémová uložená procedura sp_helptext
Další metodou, jak vrátit definici pohledu, je použít sp_helptext
uložená procedura systému. Kromě vrácení definice pro pohled může také vrátit definici uživatelem definovaného pravidla, výchozí, nešifrovanou uloženou proceduru T-SQL, uživatelem definovanou funkci Transact-SQL, spouštěč, vypočítaný sloupec, CHECK
omezení nebo systémový objekt, jako je systémová uložená procedura.
Jak bylo zmíněno v předchozím příkladu, tato uložená procedura zobrazuje definici pohledu na více řádcích. Každý řádek obsahuje 255 znaků T-SQL definice.
Příklad:
EXEC sp_helptext 'Website.Customers';
Zde je výsledek, který dostanu při použití GUI (Azure Data Studio):
A zde je to, co získám pomocí rozhraní příkazového řádku:
+---------+| Text ||---------|| || VYTVOŘIT ZOBRAZENÍ Website.Customers || AS || SELECT s.CustomerID, || s.CustomerName, || sc.CustomerCategoryName, || pp.FullName AS PrimaryContact, || ap.FullName AS AlternateContact, || s.PhoneNumber, || s.FaxNumber, || bg.NázevNákupníSkupiny, || s.WebsiteURL, || dm.DeliveryMethodName AS DeliveryMethod, || c.CityName AS Název města, || 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 [Aplikace].Lidé JAKO pp || ON s.PrimaryContactPersonID =pp.PersonID || PŘIPOJIT SE LEFT OUTER [Aplikace].Lidé JAKO Ap || ON s.AlternateContactPersonID =ap.PersonID || LEFT OUTER JOIN Sales.BuyingGroups AS bg || ON s.BuyingGroupID =bg.BuyingGroupID || LEFT OUTER JOIN [Aplikace].Metody doručení AS dm || ON s.DeliveryMethodID =dm.DeliveryMethodID || LEFT OUTER JOIN [Aplikace].Města JAKO c || ON s.DeliveryCityID =c.CityID |+--------+
Tentokrát výsledky vypadají lépe při použití GUI.
Příklad 3 – Funkce OBJECT_DEFINITION()
Dalším způsobem, jak vrátit definici pohledu, je použít OBJECT_DEFINITION()
funkce. Stejně jako u předchozích metod může tato metoda také vrátit definici jiných typů objektů.
Zde je příklad použití této funkce:
SELECT OBJECT_DEFINITION( OBJECT_ID('Webové stránky.Zákazníci') ) AS [Definice];
Výsledek:
+---------------+| Definice ||---------------|| CREATE VIEW Website.CustomersASSELECT s.CustomerID, s.CustomerName, sc.CustomerCategoryName, pp.FullName AS PrimaryContact, ap.FullName AS AlternateContact, s.PhoneNumber, s.FaxNumber, s.FaxNumber, bgdme AShod.WebM Delivery, sc.CustomerCategoryName. , c.CityName AS Název města, s.DeliveryLocation AS DeliveryLocation, s.DeliveryRun, s.RunPositionFROM Sales.Customers AS SLEFT OUTER JOIN Sales.CustomerCategories AS scON s.CustomerCategoryID =sc.CustomerFTOUTEREgoryINpleOIDLE] PrimaryContactPersonID =pp.PersonIDLEFT VNĚJŠÍ PŘIPOJENÍ [Aplikace].Lidé JAKO apON s.AlternateContactPersonID =ap.PersonIDLEFT OUTER JOIN Sales.BuyingGroups AS bgON s.DemetIDGroupID =bg.BuyingetIDhodlivGroupM DeliveryMethodIDLEFT OUTER JOIN [Aplikace].Cities AS con s.DeliveryCityID =c.CityID |+--------------+
Tentokrát je to snazší číst v mém CLI než v mé mřížce GUI.
Příklad 4 – Zobrazení schématu systémových informací VIEWS
VIEWS
zobrazení schématu systémových informací může také vrátit definici pohledu. Jeden rozdíl mezi touto metodou a předchozími je v tom, že VIEWS
zobrazení informačního schématu je omezeno pouze na zobrazení (jak název napovídá).
Vrací spoustu sloupců, z nichž jeden je definice pohledu. Proto můžeme tento sloupec pojmenovat a vrátit pouze definici:
SELECT VIEW_DEFINITIONFROM INFORMATION_SCHEMA.VIEWSWHERE TABLE_NAME ='Zákazníci';
Výsledek:
+-------------------+| VIEW_DEFINITION ||-------------------|| CREATE VIEW Website.CustomersASSELECT s.CustomerID, s.CustomerName, sc.CustomerCategoryName, pp.FullName AS PrimaryContact, ap.FullName AS AlternateContact, s.PhoneNumber, s.FaxNumber, s.FaxNumber, bgdme AShod.WebM Delivery, sc.CustomerCategoryName. , c.CityName AS Název města, s.DeliveryLocation AS DeliveryLocation, s.DeliveryRun, s.RunPositionFROM Sales.Customers AS SLEFT OUTER JOIN Sales.CustomerCategories AS scON s.CustomerCategoryID =sc.CustomerFTOUTEREgoryINpleOIDLE] PrimaryContactPersonID =pp.PersonIDLEFT VNĚJŠÍ PŘIPOJENÍ [Aplikace].Lidé JAKO apON s.AlternateContactPersonID =ap.PersonIDLEFT OUTER JOIN Sales.BuyingGroups AS bgON s.DemetIDGroupID =bg.BuyingetIDhodlivGroupM DeliveryMethodIDLEFT OUTER JOIN [Aplikace].Cities AS con s.DeliveryCityID =c.CityID |+-------------------+Všimněte si, že
VIEW_DEFINITION
sloupec v tomto systémovém zobrazení má maximální délku nvarchar(4000) . Pro větší definice zobrazení můžete použítOBJECT_DEFINITION()
funkce v předchozím příkladu.Vrácená hodnota
OBJECT_DEFINITION()
funkce je nvarchar(max) , takže nemá omezení počtu znaků podleVIEW_DEFINITION
sloupec (jak již bylo zmíněno, je nvarchar(4000) ).