将varchar()列限制为特定值?

时间:2010-03-14 06:55:51

标签: sql sql-server-2008 ssms

有没有办法为MS SQL Server 2008中的varchar列指定4个不同的值?

例如,我需要一个名为Frequency(varchar)的列,它只接受'Daily','Weekly','Monthly','Yearly'作为可能的值

创建表时是否可以在SQL Server Management Studio中设置?

4 个答案:

答案 0 :(得分:116)

您是否已经考虑在该列上添加check constraint来限制值?类似的东西:

CREATE TABLE SomeTable
(
   Id int NOT NULL,
   Frequency varchar(200),
   CONSTRAINT chk_Frequency CHECK (Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly'))
)

答案 1 :(得分:47)

您需要check constraint

  

CHECK约束确定有效值   从一个不是的逻辑表达式   基于另一列中的数据。对于   例如,a的值范围   工资栏可以受到限制   创建一个CHECK约束   仅允许范围从的数据   15,000美元到100,000美元。这个   防止输入工资   超出正常工资范围。

你想要这样的东西:

ALTER TABLE dbo.Table ADD CONSTRAINT CK_Table_Frequency
    CHECK (Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly'))

您还可以使用标量函数实现检查约束,如上面的链接所述,这就是我喜欢的方式。

答案 2 :(得分:11)

就个人而言,我将其编码为tinyint并且:

  • 或者:将其更改为客户端上的文本,检查1到4之间的约束
  • 或:使用带外键的查找表

原因:

  • 存储文本平均需要8个字节,tinyint需要1个字节。超过数百万行,这将有所作为。

  • 整理怎么样? “每日”与“每日”相同吗?这需要资源来进行这种比较。

  • 最后,如果你想添加“Biweekly”或“Hourly”怎么办?当您只需将新行添加到查找表时,这需要更改架构。

答案 3 :(得分:4)

编辑表格时 右键单击 - >检查约束 - >添加 - >在表达式字段中键入类似Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly')的内容,在(名称)字段中键入一个好的约束名称 你完成了。