Я использую SQL Server 2008 R2. У меня есть две функции под Programmatibility > Functions > Table-valued Functions
.
Первый возвращает коллекцию всех доступных столбцов и записей.
Второй отфильтровывает первый с проверкой Id.
Допустим, у меня есть Customers
таблица.
Первая функция выглядит так:
ALTER FUNCTION [dbo].[fnGetCustomers]()
RETURNS TABLE
AS
RETURN
SELECT
C.CustomerId AS Id,
C.CustomerName AS Name
FROM
Customers AS C
и я так называю SELECT * FROM fnGetCustomers()
.
Второй выглядит так:
ALTER FUNCTION [dbo].[fnGetCustomerById]
(@CustomerId AS INT)
RETURNS TABLE
AS
RETURN
SELECT *
FROM fnGetCustomers()
WHERE (Id = @CustomerId)
и я так называю SELECT * FROM fnGetCustomerById(1)
.
Моя проблема заключается в том, что я добавляю новый столбец в схему Customers
таблицы.
Сначала я редактирую fnGetCustomers
, чтобы включить новый столбец следующим образом
ALTER FUNCTION [dbo].[fnGetCustomers]()
RETURNS TABLE
AS
RETURN
SELECT
C.CustomerId AS Id,
C.CustomerName AS Name,
C.CustomerPhone AS Phone
FROM
Customers AS C
fnGetCustomers
отлично работает после модификации. Хотя все остальные функции, такие как fnGetCustomerById
, которые зависят от этой конкретной функции, пропускают новый столбец. Несмотря на использование *
в запросе выбора.
Я могу решить проблему с помощью Right-Click on function > Modify > Execute!
для каждой из функций.
Полагаю, что-то происходит внутри и обновляет их.
В моей базе данных используется большое количество функций, которые зависят от этой конкретной базовой функции, поэтому практически невозможно найти и "изменить> выполнить" их все.
Что можно сделать, чтобы схема базы данных автоматически обновлялась / обновлялась?