我正在尝试此代码,但我收到此错误消息:在预期条件的上下文中指定的非布尔类型的表达式,靠近','。
ALTER TABLE customers
ADD active int
DEFAULT (1)
CONSTRAINT chk_active
CHECK (0,1);
提前致谢!
答案 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));