При управлении базами данных с большим количеством объектов изменение одного объекта может стать сложной задачей, если на него полагается множество зависимых объектов. В этой статье мы сосредоточимся на том, как обновить изменения столбцов в зависимых представлениях в SQL Server.
Сценарий 1: Явно определенные имена столбцов
В этом сценарии у вас явно определены имена столбцов в зависимых представлениях. Чтобы обновить эти изменения столбцов, вам нужно выполнить задачу поиска/замены. К сожалению, для этой задачи нет доступных нативных инструментов. Однако вы можете использовать сторонние бесплатные инструменты, такие как RedGate SQL Search или ApexSQL SQL Search, у каждого из которых есть свои плюсы и минусы. Ознакомьтесь с обоими инструментами и выберите тот, который лучше всего подходит для ваших нужд.
Сценарий 2: Неявно определенные имена столбцов
В этом сценарии у вас неявно определены имена столбцов в зависимых представлениях, обычно с использованием оператора “SELECT *”. Хотя это не считается лучшей практикой, это упрощает воспроизведение изменений. Давайте посмотрим, как это сделать.
Настройка нашего примера
Для этого примера мы будем использовать тестовую базу данных WideWorldImporters. Мы создадим два простых представления, одно из которых зависит от другого:
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;
При выполнении второго представления вы заметите, что метки столбцов первого представления не очень описательны и их можно улучшить.
Чтобы обновить имена столбцов в первом представлении, выполните следующий оператор ALTER VIEW:
ALTER VIEW dbo.[vi_invoices_received_by] AS
SELECT ConfirmedReceivedBy as [Received by], COUNT(InvoiceID) as [# of Invoices], CustomerID
FROM Sales.Invoices
GROUP BY ConfirmedReceivedBy, CustomerID;
Теперь вы можете ожидать, что обновленные имена столбцов появятся во втором представлении. Однако, если вы выполните представление снова, вы получите те же результаты, что и раньше. Что произошло?
Обновление зависимых представлений
SQL Server предоставляет процедуру sp_refreshview для обновления метаданных представлений, позволяя вам обновлять схему без пересоздания объектов. В нашем случае вам просто нужно выполнить следующий код для второго представления:
EXEC sp_refreshview 'dbo.[vi_additional_fields_received_by]';
Если вы выполните второе представление снова, вы увидите, что метки были обновлены.
Повторите процедуру sp_refreshview для каждого зависимого представления, чтобы убедиться, что все изменения отражены.
Что делать, если я не знаю зависимых объектов?
Если вы не уверены в зависимых объектах, есть несколько способов их определения. Вот два метода:
Метод 1: Через T-SQL
Вы можете выполнить процедуру sp_depends, которая вернет два подмножества: первое подмножество содержит объекты, от которых зависит текущий объект, а второе подмножество содержит объекты, которые зависят от текущего объекта. Вот как это использовать:
EXEC sp_depends 'имя_вашего_объекта';
Метод 2: Через SSMS
В SQL Server Management Studio (SSMS) просто щелкните правой кнопкой мыши на объекте и выберите “Просмотр зависимостей”, чтобы увидеть список зависимых объектов.
Следуя этим методам, вы легко сможете определить зависимые объекты и обновить их соответствующим образом.
Это все для этой статьи. Мы обсудили, как обновить изменения столбцов в зависимых представлениях в SQL Server. Независимо от того, явно или неявно определены имена столбцов, важно убедиться, что все зависимые представления обновлены, чтобы точно отражать изменения.