SQL Server не обновляет функции - PullRequest
2 голосов
/ 03 мая 2019

Я использую 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! для каждой из функций.

Полагаю, что-то происходит внутри и обновляет их.

В моей базе данных используется большое количество функций, которые зависят от этой конкретной базовой функции, поэтому практически невозможно найти и "изменить> выполнить" их все.
Что можно сделать, чтобы схема базы данных автоматически обновлялась / обновлялась?

...