1
我在数据库中创建了一个DEFAULT约束,我想在几个表中共享这个约束,并且我想编写一个用于添加字段的唯一alter table语句该表如下:T-SQL添加绑定到现有默认约束的列
ALTER TABLE MyTable ADD MyField NOT NULL DEFAULT(DF_EXISTING_DEFAULT)
以下错误ocurrs:
Msg 128, Level 15, State 1, Line 1
The name "DF_EXISTING_DEFAULT" is not permitted in this context. Valid expressions are constants, constant expressions, and (in some contexts) variables. Column names are not permitted.
注意,默认值是DF_EXISTING_DEFAULT已经定义,我不想再写一遍。我该怎么做?任何理由我不应该这样做?这是一个t-sql限制吗?
嗯,默认并不复杂(例如DEFAULT('简单文本'),但它可以在将来改变。在这种情况下,UDF是避免“代码重复”的唯一方法吗?这个时候是保留一个* single *默认值,并避免那些sql自动约束命名。 – natenho
@natenho - 是的。默认*约束*不能在列之间共享,并且在SQL Server中没有用户定义的全局变量,所以避免在约束定义中重复“简单的文本”这是唯一的方法,你也可以将它存储在一个表中,但这也需要一个UDF来访问,存储在表中的优点可能更容易维护(改变UDF定义将需要删除引用它的所有默认值),但在UDF中硬编码将更有效,而约束定义本身更加如此。 lity。 –
关于“不能共享”......当你在多个表/列中使用'sp_binddefault'作为同一个DF时,你不是在共享约束吗?至少我看不到新的约束条件。 – natenho