如何使用默认值和必需值创建列?

时间:2015-11-24 11:09:48

标签: sql sql-server

我正在尝试此代码,但我收到此错误消息:在预期条件的上下文中指定的非布尔类型的表达式,靠近','。

ALTER TABLE customers 
ADD         active int
DEFAULT     (1) 
CONSTRAINT  chk_active
CHECK       (0,1);

提前致谢!

3 个答案:

答案 0 :(得分:1)

定义检查约束时,您必须实际引用列名称,即CHECK (Active IN (0,1)而不是CHECK (0, 1)。所以你的语法是

ALTER TABLE Customers ADD 
    active INT DEFAULT (1)
    CONSTRAINT  chk_active CHECK (Active IN (0,1));

为默认约束命名也是一个好主意,并在约束名称中包含表名,这样就不会与其他表上的类似约束发生冲突:

ALTER TABLE Customers ADD 
    Active INT CONSTRAINT DF_Customers__Active DEFAULT (1)
    CONSTRAINT CHK_Customers__Active CHECK (Active IN (0,1));

但是,拥有一个非空位列似乎更合适,因此不需要检查约束:

ALTER TABLE Customers ADD Active BIT NOT NULL CONSTRAINT DF_Customers__Active DEFAULT(1);

答案 1 :(得分:0)

ALTER TABLE customers 
ADD         active int

GO

ALTER TABLE customers 
ADD CONSTRAINT [DF_active ] DEFAULT     (1) FOR active

GO

ALTER TABLE customers 
ADD CONSTRAINT [chk_active] CHECK (active>=0 AND active <=1)

我建议你这样做。也总是考虑在约束中添加名称。

作为一个因素,为什么不使用active作为bit列,因此您不需要CHECK约束。

答案 2 :(得分:0)

试试这个

ALTER TABLE Customers ADD 
active INT DEFAULT (1)
CONSTRAINT  chk_active CHECK (Active IN (0,1));