如何一次添加新列和约束?

时间:2014-02-04 13:58:40

标签: sql sql-server-2012 constraints alter-table

我想在现有表中添加新列。

我需要它来模拟枚举类型(在SQL Server中以可能的方式;具有值约束,即)。

以下不起作用:

ALTER TABLE orders ADD [sent_to_panel] NVARCHAR(16) NULL;       
ALTER TABLE orders WITH CHECK ADD CONSTRAINT [CK_orders] CHECK (([sent_to_panel]='invalidated' OR [sent_to_panel]='not_sent' OR [sent_to_panel]='sent'));   
ALTER TABLE orders ADD CONSTRAINT [DF_orders_sent_to_panel]  DEFAULT (N'not_sent') FOR [sent_to_panel]; 
ALTER TABLE orders CHECK CONSTRAINT [CK_orders];    

我收到错误:

  

Msg 207,Level 16,State 1,Line 2
  列名称无效' sent_to_panel'。

如果我自己执行第一个命令,那么:

ALTER TABLE orders ADD [sent_to_panel] NVARCHAR(16) NULL;

其余的事情都经过了。

因此,我认为问题在于,当试图一次性完成所有内容时,该列尚未实际添加(因此ADD CONSTRAINT无法识别)。

问题是:如何使脚本正常工作?

1 个答案:

答案 0 :(得分:2)

CREATE TABLE a (
    b int
);

ALTER TABLE a
  ADD c nvarchar(16) NULL
    , CONSTRAINT check_this CHECK (c IN ('invalidated', 'not_sent', 'sent'))
    , CONSTRAINT defaultify DEFAULT ('not_sent') FOR c
;

ALTER TABLE a
  CHECK CONSTRAINT check_this
;

DROP TABLE a;