更改计算列引用的SQL函数

col*_*ium 8 sql-server-2005 calculated-columns sql-function non-deterministic

如果将表的列设置为其公式调用函数的计算列,则更改该基础函数将变得很痛苦.每次更改时,您必须找到每个引用该函数的公式的列,删除引用,保存表,更改函数,添加所有内容,然后重新保存.即使很小的变化也是噩梦.

您能否告诉SQL Server您不关心公式引用函数并继续更改基础函数?

其他详细信息:计算列不会被FK约束持久化或引用,因为它是非确定性的.该功能考虑了当前时间.它正在处理记录是否过期的问题.

mar*_*c_s 6

不,据我所知,你不能这样做 - 你必须先删除引用函数的所有计算列,改变函数,然后重新创建计算列.

也许MS会在SQL Server 2010/2011中给我们一个"创建或更改功能"命令?:-)


Gui*_*ton 6

很抱歉这么晚才回答,但它可能很有用。

您可以为每个将调用实际函数的计算列使用虚拟函数。

示例:
计算列使用公式: dbo.link_comp('123')
该函数转发参数并调用并返回函数 dbo.link('123') (您的真实函数)
两个函数只需要使用相同的参数并返回相同的类型。

然后,被锁定的函数是 dbo.link_comp,您仍然可以更改 dbo.link。
另外,如果您的函数是从其他 SQL 调用的,您仍然可以使用真实函数名称 dbo.link,虚拟函数 dbo.link_comp 仅适用于计算列。