45

如何对列施加约束,使其只能包含以下值?你怎么称呼这种类型的约束?

Allowed values: "yes", "no" or "maybe"
Column Data Type: nvarchar(5)
DBMS: SQL Server 2008
4

4 回答 4

78

您可以使用CHECK约束

ALTER TABLE <table>
ADD CONSTRAINT chk_val CHECK (col in ('yes','no','maybe'))

MSDN 链接

于 2012-08-16T06:38:15.680 回答
14

是的,检查一个约束是你需要的。您可以在表声明中声明检查约束:

CREATE TABLE test(
    _id BIGINT PRIMARY KEY NOT NULL,
    decision NVARCHAR(5),
    CHECK (decision in ('yes','no','maybe'))
);
于 2013-11-20T09:34:29.110 回答
3

使用枚举表是一种方法。

于 2012-08-16T06:39:53.697 回答
0

2021 年,我想知道我们是否可以用另一种方式来做到这一点(与检查约束相比,不一定是更好的方式)。

对于只允许“yes”、“no”或“maybe”值的列,也许我们可以有一个位类型的列,然后在它旁边有一个计算列

Create Table xxx (
ColumnName bit null,
ColumnNameDerived varchar(10) as 
    case ColumnName
        when 0 then 'no'
        when 1 then 'yes'
        else 'maybe'
    end
)

对于具有更多可能值的列,可以选择 tinyint 类型,然后使用“<= 10”之类的检查约束。假设一列有 10 个可能的值,那么约束“< 10”就可以了。

所以约束不会太长而无法阅读,并且您立即知道有多少可能的值。这也有助于节省存储空间。

于 2021-10-20T04:19:57.370 回答