我在SQL Server 2008 R2 Express上有一个名为myTable的表。
我希望有一个(婚姻)状态列,其中只有明确的值:'单身','已婚','离婚','W夫'。 默认值应为“已婚”。
有没有办法在没有附加表的情况下将字段限制为SQL Server上的上述值?
答案 0 :(得分:7)
你可以用CHECK()约束来做到这一点。
create table whatever (
...
Status varchar(12) not null default 'Married'
check (Status in ('Single', 'Married', 'Divorced', 'Widower')),
...
);
使用像这样的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');
使用人类可读的代码意味着您通常不需要额外的连接。 (如果您使用ID号,总是需要额外的连接。)如果我这样做,我会在“whatever”表中使用外键,并将默认值更改为“m”。
答案 1 :(得分:2)
CHECK
列约束可能符合您的要求 - 我不知道它们如何与字符串一起使用。 See MSDN reference