是否有内置方法将sql server中的列限制为表设计视图中的显式值列表?

ela*_*row 2 sql-server sql-server-2008 sql-server-2008-r2

我在SQL Server 2008 R2 Express上有一个名为myTable的表.

我希望有一个(婚姻)状态列,其中只有明确的值:'单身','已婚','离婚','W夫'.默认值应为"已婚".

有没有办法在没有附加表的情况下将字段限制为SQL Server上的上述值?

Mik*_*ll' 7

你可以用CHECK()约束来做到这一点.

create table whatever (
...
  Status varchar(12) not null default 'Married' 
    check (Status in ('Single', 'Married', 'Divorced', 'Widower')),
...
);
Run Code Online (Sandbox Code Playgroud)

使用像这样的CHECK约束的问题在于,用户界面更难以向用户呈现有效选择列表以供选择.如果将这四个存储在婚姻状况表中,您可以这样做select status from marital_statuses order by status;.如果它们存储在表格中,您仍然可以使用"已婚"作为默认值.

如果我要将它们存储在一个表中,它可能看起来像这样.

create table marital_statuses (
  status_code char(1) primary key,
  status_text varchar(12) not null unique
);

insert into marital_statuses values
('s', 'Single'),
('m', 'Married'),
('d', 'Divorced'),
('w', 'Widower');
Run Code Online (Sandbox Code Playgroud)

使用人类可读代码意味着您通常不需要额外的连接.(如果使用ID号,则总是需要额外的连接.)如果我这样做,我会在"whatever"表中使用外键,并将默认值更改为"m".