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

时间:2012-03-26 21:24:10

标签: sql-server sql-server-2008 sql-server-2008-r2

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

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

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

2 个答案:

答案 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