Database
 sql >> Base de Dados >  >> RDS >> Database

4 maneiras de obter a definição de uma exibição usando o Transact-SQL


Este artigo apresenta 4 formas de usar o T-SQL para obter a definição de uma view no SQL Server.

A definição de exibição é a instrução T-SQL real usada para criar a exibição.


Exemplo 1 – A Exibição do Catálogo do Sistema sys.sql_modules


Os sys.sql_modules a exibição do catálogo do sistema retorna uma linha para cada objeto que é um módulo definido pela linguagem SQL no SQL Server.

Em outras palavras, você pode usar essa exibição para retornar informações sobre objetos de vários tipos, incluindo funções, procedimentos armazenados e, claro, exibições.

Uma das colunas retornadas com esta visão é chamada de definição . Como o nome indica, isso retorna a definição do objeto.
SELECT definitionFROM sys.sql_modulesWHERE object_id =object_id('Website.Customers');

Resultado:
+--------------+| definição ||--------------|| CREATE VIEW Website.CustomersASSELECT 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.RunPositionFROM Sales.Customers AS sLEFT OUTER JOIN Sales.CustomerCategories AS scON s.CustomerCategoryID =sc.CustomerCategoryIDLEFT OUTER JOIN [Aplicativo].Pessoas AS ppON s. PrimaryContactPersonID =pp.PersonIDLEFT OUTER JOIN [Application].People AS apON s.AlternateContactPersonID =ap.PersonIDLEFT OUTER JOIN Sales.BuyingGroups AS bgON s.BuyingGroupID =bg.BuyingGroupIDLEFT OUTER JOIN [Application].DeliveryMethods AS dmON s.DeliveryMethodID =dm. DeliveryMethodIDLEFT OUTER JOIN [Application].Cities AS cON s.DeliveryCityID =c.CityID |+--------------+(1 linha affe cted)

Eu usei uma interface de linha de comando (CLI) com este exemplo, então o resultado é bem formatado.

Se você usar uma GUI (como SSMS ou Azure Data Studio) para retornar os resultados em uma grade, a definição provavelmente será retornada em uma linha longa em uma única célula. Nesses casos, você precisará fazer algum trabalho extra se quiser que ele seja exibido em um formato mais legível. Alternativamente, você pode usar o sp_helptext método abaixo.

Exemplo 2 – O procedimento armazenado do sistema sp_helptext


Outro método de retornar a definição de uma visão é usar o sp_helptext procedimento armazenado do sistema. Além de retornar a definição para uma exibição, ele também pode retornar a definição de uma regra definida pelo usuário, padrão, procedimento armazenado T-SQL não criptografado, função Transact-SQL definida pelo usuário, gatilho, coluna computada, CHECK restrição ou objeto do sistema, como um procedimento armazenado do sistema.

Conforme mencionado no exemplo anterior, esse procedimento armazenado exibe a definição da exibição em várias linhas. Cada linha contém 255 caracteres da definição T-SQL.

Exemplo:
EXEC sp_helptext 'Website.Customers';

Aqui está o resultado que recebo ao usar uma GUI (Azure Data Studio):



E aqui está o que eu recebo usando minha interface de linha de comando:
+--------+| Texto ||--------|| || CRIAR VISUALIZAÇÃO Website.Clientes || AS || SELECT s.CustomerID, || s.NomeDoCliente, || 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 [Aplicativo].Pessoas AS pp || ON s.PrimaryContactPersonID =pp.PersonID || LEFT OUTER JOIN [Aplicativo].Pessoas AS ap || ON s.AlternateContactPersonID =ap.PersonID || LEFT OUTER JOIN Sales.BuyingGroups AS bg || ON s.BuyingGroupID =bg.BuyingGroupID || LEFT OUTER JOIN [Aplicativo].DeliveryMethods AS dm || ON s.DeliveryMethodID =dm.DeliveryMethodID || LEFT OUTER JOIN [Aplicativo].Cidades AS c || ON s.DeliveryCityID =c.CityID |+--------+

Desta vez, os resultados parecem melhores ao usar a GUI.

Exemplo 3 – A função OBJECT_DEFINITION()


Outra maneira de retornar a definição de uma visão é usar o OBJECT_DEFINITION() função. Assim como os métodos anteriores, este método também pode retornar a definição de outros tipos de objetos.

Aqui está um exemplo de uso desta função:
SELECT OBJECT_DEFINITION( OBJECT_ID('Website.Customers') ) AS [Definição];

Resultado:
+--------------+| Definição ||--------------|| CREATE VIEW Website.CustomersASSELECT 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.RunPositionFROM Sales.Customers AS sLEFT OUTER JOIN Sales.CustomerCategories AS scON s.CustomerCategoryID =sc.CustomerCategoryIDLEFT OUTER JOIN [Aplicativo].Pessoas AS ppON s. PrimaryContactPersonID =pp.PersonIDLEFT OUTER JOIN [Application].People AS apON s.AlternateContactPersonID =ap.PersonIDLEFT OUTER JOIN Sales.BuyingGroups AS bgON s.BuyingGroupID =bg.BuyingGroupIDLEFT OUTER JOIN [Application].DeliveryMethods AS dmON s.DeliveryMethodID =dm. DeliveryMethodIDLEFT OUTER JOIN [Application].Cities AS cON s.DeliveryCityID =c.CityID |+--------------+

Desta vez, é mais fácil ler na minha CLI do que na minha grade da GUI.

Exemplo 4 – A Exibição do Esquema de Informações do Sistema VIEWS


As VISUALIZAÇÕES A visualização do esquema de informações do sistema também pode retornar a definição de uma visualização. Uma diferença entre este método e os anteriores é que, o VIEWS a visualização do esquema de informações é limitada a apenas visualizações (como o nome indica).

Ele retorna um monte de colunas, uma das quais é a definição da visão. Portanto, podemos nomear essa coluna para retornar apenas a definição:
SELECT VIEW_DEFINITIONFROM INFORMATION_SCHEMA.VIEWSWHERE TABLE_NAME ='Clientes';

Resultado:
+-------------------+| VIEW_DEFINITION ||-------------------|| CREATE VIEW Website.CustomersASSELECT 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.RunPositionFROM Sales.Customers AS sLEFT OUTER JOIN Sales.CustomerCategories AS scON s.CustomerCategoryID =sc.CustomerCategoryIDLEFT OUTER JOIN [Aplicativo].Pessoas AS ppON s. PrimaryContactPersonID =pp.PersonIDLEFT OUTER JOIN [Application].People AS apON s.AlternateContactPersonID =ap.PersonIDLEFT OUTER JOIN Sales.BuyingGroups AS bgON s.BuyingGroupID =bg.BuyingGroupIDLEFT OUTER JOIN [Application].DeliveryMethods AS dmON s.DeliveryMethodID =dm. DeliveryMethodIDLEFT OUTER JOIN [Aplicativo].Cidades AS cON s.DeliveryCityID =c.CityID |+-------------------+ 
Observe que o VIEW_DEFINITION coluna nesta visualização do sistema tem um comprimento máximo de nvarchar(4000) . Para definições de visualização maiores que isso, você pode usar o OBJECT_DEFINITION() função no exemplo anterior.

O valor de retorno de OBJECT_DEFINITION() função é nvarchar(max) , portanto, não tem a limitação de caracteres do VIEW_DEFINITION coluna (que, como mencionado, é nvarchar(4000) ).