计算列中使用的标量函数,更新函数的最干净方法是什么?


10

我想在我们的数据库中更新一个标量函数。该函数用于键表中的多个计算列,因此如果尝试更新它,则会出现依赖项错误。我可以显式删除列,更新函数并重新添加列,但是,如果没有很多多余的幻想,那将改变列顺序,并可能产生其他意想不到的后果。我想知道是否有一种更清洁的方法?


4
我通过创建调用真实函数的伪函数仅部分解决了这一问题。当然,如果签名发生更改,那么一切都将再次发生。

3
不幸的是,我认为没有任何“魔术”或“清洁”的方式可以做到这一点。如果需要修改功能,则需要删除列,修改功能,然后重新添加所有列。没办法解决。
marc_s 2012年

@marc_s好吧,值得一试,这里有很多聪明的人:)
robertc 2012年

同意以上评论。以为SYNONYM可能在这里提供一些帮助(在计算列中引用SYNONYM)-但是您不能更改曾经创建的同义词以将其“重定向”到另一个对象。
AdaTheDev 2012年

1
仍远没有更新CLR UDT的定义那么痛苦(即使更改只是对方法的调整而根本不影响存储表示)
Martin Smith

Answers:


2

这可能需要更多工作,但应该(大概)获得您所追求的目标:

1-创建一个新表,其中仅包含主表中的PK和已更新的功能。

2-删除旧列

3-将旧表重命名为类似 TableName_Base

4-创建一个VIEW将您的主表连接到您的查找表的表格,并按照您想要查看它们的顺序排列字段。无论原始表名是什么,都为视图命名。

这将潜在地产生一些问题,INSERTS并且UPDATES虽然因为你通过一个视图访问。为了解决这个问题,您可以绕过视图直接插入表中。


这听起来像删除和重新添加列需要更多的工作,并且具有相同的风险。
robertc 2012年

1
@robertc如果这是一个高事务环境,它将减少破坏性,但是是的,它仍然很混乱。
JNK 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.