首页 > 解决方案 > SQL Server 不刷新函数

问题描述

我正在使用 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!每个功能解决问题。

我猜有些东西在内部运行并刷新它们。

我的数据库使用了大量依赖于这个特定基本函数的函数,因此几乎不可能找到并“修改 > 执行”所有这些函数。
可以做些什么来使数据库方案自动更新/刷新自己?

标签: sql-serverdatabasefunctionschema

解决方案


推荐阅读