Published on

June 24, 2019

Atualizando Alterações de Colunas em Visualizações Dependentes no SQL Server

Ao gerenciar bancos de dados com inúmeros objetos, fazer alterações em um único objeto pode se tornar desafiador se houver muitos objetos dependentes que dependem dele. Neste post do blog, vamos nos concentrar em como atualizar alterações de colunas em visualizações dependentes no SQL Server.

Cenário 1: Nomes de Colunas Explicitamente Definidos

Neste cenário, você tem nomes de colunas explicitamente definidos nas visualizações dependentes. Para atualizar essas alterações de colunas, você precisa realizar uma tarefa de localizar/substituir. Infelizmente, não existem ferramentas nativas disponíveis para essa tarefa. No entanto, você pode utilizar ferramentas gratuitas de terceiros como RedGate SQL Search ou ApexSQL SQL Search, ambas com seus prós e contras. Dê uma olhada em ambas as ferramentas e escolha aquela que melhor atenda às suas necessidades.

Cenário 2: Nomes de Colunas Implicitamente Definidos

Neste cenário, você tem nomes de colunas implicitamente definidos nas visualizações dependentes, geralmente usando a declaração “SELECT *”. Embora isso não seja considerado uma boa prática, facilita a replicação de alterações. Vamos ver como fazer isso.

Configurando nosso exemplo

Para este exemplo, usaremos o banco de dados de teste WideWorldImporters. Vamos criar duas visualizações simples, sendo uma dependente da outra:

USE WideWorldImporters;

CREATE VIEW dbo.[vi_invoices_received_by] AS
SELECT ConfirmedReceivedBy, COUNT(InvoiceID) as [Num], CustomerID
FROM Sales.Invoices
GROUP BY ConfirmedReceivedBy, CustomerID;

CREATE VIEW dbo.[vi_additional_fields_received_by] AS
SELECT RB.*, C.CustomerName
FROM dbo.vi_invoices_received_by RB
INNER JOIN sales.Customers C ON C.CustomerID = RB.CustomerID;

Ao executar a segunda visualização, você perceberá que os rótulos das colunas da primeira visualização não são muito descritivos e podem ser melhorados.

Para atualizar os nomes das colunas na primeira visualização, execute a seguinte instrução ALTER VIEW:

ALTER VIEW dbo.[vi_invoices_received_by] AS
SELECT ConfirmedReceivedBy as [Recebido por], COUNT(InvoiceID) as [# de Faturas], CustomerID
FROM Sales.Invoices
GROUP BY ConfirmedReceivedBy, CustomerID;

Agora, você pode esperar ver os nomes das colunas atualizados na segunda visualização. No entanto, se você executar a visualização novamente, obterá os mesmos resultados de antes. Então, o que aconteceu?

Atualizando suas visualizações dependentes

O SQL Server fornece o procedimento sp_refreshview para atualizar os metadados das visualizações, permitindo que você atualize o esquema sem recriar os objetos. No nosso caso, você só precisa executar o seguinte código na segunda visualização:

EXEC sp_refreshview 'dbo.[vi_additional_fields_received_by]';

Se você executar a segunda visualização novamente, verá que os rótulos foram atualizados agora.

Repita o procedimento sp_refreshview para cada visualização dependente para garantir que todas as alterações sejam refletidas.

E se eu não souber os objetos dependentes?

Se você não tiver certeza sobre os objetos dependentes, existem várias maneiras de determiná-los. Aqui estão dois métodos:

Método 1: Via T-SQL

Você pode executar o procedimento sp_depends, que retornará dois subconjuntos: o primeiro subconjunto contém objetos nos quais o objeto atual depende, e o segundo subconjunto contém objetos que dependem do objeto atual. Veja como usá-lo:

EXEC sp_depends 'nome_do_seu_objeto';

Método 2: Via SSMS

No SQL Server Management Studio (SSMS), basta clicar com o botão direito no objeto e selecionar “Exibir Dependências” para ver uma lista de objetos dependentes.

Seguindo esses métodos, você pode identificar facilmente os objetos dependentes e atualizá-los conforme necessário.

Isso é tudo para este post do blog. Discutimos como atualizar alterações de colunas em visualizações dependentes no SQL Server. Seja com nomes de colunas explicitamente ou implicitamente definidos, é importante garantir que todas as visualizações dependentes sejam atualizadas para refletir as alterações com precisão.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.