我想在现有表中添加新列。
我需要它来模拟枚举类型(在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
无法识别)。
问题是:如何使脚本正常工作?
答案 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;