将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一个好的约束名称。
你完成了。