sql >> Databáze >  >> RDS >> Database

4 způsoby, jak získat definici pohledu pomocí Transact-SQL

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žít OBJECT_DEFINITION() funkce v předchozím příkladu.

Vrácená hodnota OBJECT_DEFINITION() funkce je nvarchar(max) , takže nemá omezení počtu znaků podle VIEW_DEFINITION sloupec (jak již bylo zmíněno, je nvarchar(4000) ).


  1. MySQL, aktualizujte více tabulek jedním dotazem

  2. Spojení tabulek s problémem SUM v MYSQL

  3. Připojujete se k MS SQL Server s ověřováním Windows pomocí Pythonu?

  4. Indexované zobrazení údržby v prováděcích plánech