有没有办法为MS SQL Server 2008中的varchar列指定4个不同的值?
例如,我需要一个名为Frequency(varchar)的列,它只接受'Daily','Weekly','Monthly','Yearly'作为可能的值
创建表时是否可以在SQL Server Management Studio中设置?
答案 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并且:
原因:
存储文本平均需要8个字节,tinyint需要1个字节。超过数百万行,这将有所作为。
整理怎么样? “每日”与“每日”相同吗?这需要资源来进行这种比较。
最后,如果你想添加“Biweekly”或“Hourly”怎么办?当您只需将新行添加到查找表时,这需要更改架构。
答案 3 :(得分:4)
编辑表格时
右键单击 - >检查约束 - >添加 - >在表达式字段中键入类似Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly')
的内容,在(名称)字段中键入一个好的约束名称
你完成了。