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

有没有一种方法来指定,例如MS SQL Server 2008中的varchar列的4个不同的值?

例如,我需要一个名为Frequency(varchar)的列,它只接受“每日”,“每周”,“每月”,“每年”作为可能值

创build表时可以在SQL Server Management Studio中设置吗?

你是否已经考虑在该列上添加一个限制值的check constraint ? 就像是:

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

你想要一个检查约束 。

CHECK约束根据不是基于另一列中的数据的逻辑expression式确定有效值。 例如,可以通过创buildCHECK约束来限制薪水列的值范围,该约束仅允许范围从$ 15,000到$ 100,000的数据。 这可以防止工资超出正常的工资范围。

你想要的东西像:

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

您也可以使用标量函数来实现检查约束,如上面的链接所述,我更喜欢这样做。

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

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

原因:

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

  • 整理什么? “每日”与“每日”相同吗? 它需要资源做这种比较。

  • 最后,如果你想添加“双周”或“每小时”? 当您只需将新行添加到查找表中时,就需要更改模式。

当你编辑一个表格
右键单击 – >检查约束 – >添加 – >在expression式字段中Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly') ,并在(Name)字段中input一个好的约束名称。
你完成了。