我对使用标量 UDF 的列有一个检查约束。我有一个需要更改 UDF 的要求。据我所知,我需要删除约束,对 UDF 进行更改,然后重新添加约束。在取消约束期间,我担心表中可能会插入坏数据。有没有办法在不删除约束的情况下更改 UDF?如果不是,有没有办法防止坏数据进入表?
我对使用标量 UDF 的列有一个检查约束。我有一个需要更改 UDF 的要求。据我所知,我需要删除约束,对 UDF 进行更改,然后重新添加约束。在取消约束期间,我担心表中可能会插入坏数据。有没有办法在不删除约束的情况下更改 UDF?如果不是,有没有办法防止坏数据进入表?
你不应该
当您将标量 UDF 放入计算列或检查约束时,您会遇到两个问题:
在可能的情况:
照本宣科
不,不幸的是,您不能更改检查约束使用的函数,即使在使用 NOCHECK 禁用时也是如此。
您可以通过以下方式解决此问题(没有不良数据的风险):-
或者,如果您需要保留检查约束和函数的名称,您可以通过以下方式实现:-
您可以在一个事务中完成所有操作,这将
Sch-M
在表上强制执行模式修改锁,以防止插入任何数据。例如:
我同意检查约束中的函数是个坏主意,应该尽可能避免。
需要这样一个函数的一个常见原因是创建一个多表约束。然而,这可以使用一个鲜为人知的技巧使用索引视图来更好地完成。一种效率稍低的方法是触发器。