我可以在SQL Server的添加列语句中创build一个命名的默认约束吗?

在SQL Server中,我在表上有一个新列:

ALTER TABLE t_tableName ADD newColumn NOT NULL 

这失败了,因为我指定了NOT NULL而没有指定默认约束。 该表不应该有一个默认的约束。

为了解决这个问题,我可以使用默认约束创build表,然后删除它。

然而,似乎没有什么办法可以指定默认的约束应该被命名为这个语句的一部分,所以我唯一的方法是摆脱它的存储过程,它在sys.default_constraints表。

这对于可能发生的操作来说有点麻烦/冗长。 有没有人有更好的解决scheme呢?

这应该工作:

 ALTER TABLE t_tableName ADD newColumn VARCHAR(50) CONSTRAINT YourContraintName DEFAULT '' NOT NULL 
 ALTER TABLE t_tableName ADD newColumn int NOT NULL CONSTRAINT DF_defaultvalue DEFAULT (1) 

我可以在没有NOT NULL的情况下创build列,在现有的date上运行更新,然后改变列的NOT NULL。 我担心这种性能影响,例如,如果它在一个数百万行的表上,所以这看起来不太理想。

这是做到这一点的方法:

  ALTER TABLE { TABLE_NAME } ADD { COLUMN_NAME } { DATA_TYPE } { NULL | NOT NULL } CONSTRAINT { CONSTRAINT_NAME } DEFAULT { DEFAULT_VALUE }