在MS SQL Server 2008中,是否有一种方法可以为varchar列指定4个不同的值?
例如,我需要一个名为“频率”的列(varchar),只接受“每日”、“每周”、“每月”、“每年”等可能的取值
在创建表时,是否可以在SQL Server Management Studio中设置这个限制?
在MS SQL Server 2008中,是否有一种方法可以为varchar列指定4个不同的值?
例如,我需要一个名为“频率”的列(varchar),只接受“每日”、“每周”、“每月”、“每年”等可能的取值
在创建表时,是否可以在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'))
)
你想要类似这样的东西:检查约束通过逻辑表达式确定有效值, 而该表达式不基于其他列中的数据。 例如,可以通过创建检查约束来限制薪资列的值范围, 以允许仅从15000美元到100000美元的数据。 这样可以防止超出常规薪资范围的薪资被输入。
ALTER TABLE dbo.Table ADD CONSTRAINT CK_Table_Frequency
CHECK (Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly'))
你也可以使用标量函数来实现检查约束,就像上面链接中描述的那样,这是我更喜欢的方法。
个人而言,我会把它编码为tinyint类型,并:
原因:
平均需要8个字节来存储文本,而只需要1个字节来存储tinyint。在数百万行数据的情况下,这将产生巨大的差异。
那么排序规则呢?"Daily"和"DAILY"是相同的吗?这种比较需要消耗资源。
最后,如果您想添加"Biweekly"或"Hourly",这将需要模式更改,但您可以将新行添加到查找表中。
当您正在编辑表格时
右键单击 ->检查约束 ->添加 ->在表达式字段中输入类似于Frequency IN('Daily','Weekly','Monthly','Yearly')
的内容和一个好的约束名称在(名称)字段中。
完成。