ela*_*row 2 sql-server sql-server-2008 sql-server-2008-r2
我在SQL Server 2008 R2 Express上有一个名为myTable的表.
我希望有一个(婚姻)状态列,其中只有明确的值:'单身','已婚','离婚','W夫'.默认值应为"已婚".
有没有办法在没有附加表的情况下将字段限制为SQL Server上的上述值?
你可以用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".