Ada*_*dam 91 sql ssms sql-server-2008
有没有办法为MS SQL Server 2008中的varchar列指定4个不同的值?
例如,我需要一个名为Frequency(varchar)的列,它只接受'Daily','Weekly','Monthly','Yearly'作为可能的值
在创建表时,是否可以在SQL Server Management Studio中进行设置?
Ash*_*pta 125
您是否已经考虑在check constraint该列上添加限制值的列?就像是:
CREATE TABLE SomeTable
(
Id int NOT NULL,
Frequency varchar(200),
CONSTRAINT chk_Frequency CHECK (Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly'))
)
Run Code Online (Sandbox Code Playgroud)
Mic*_*tta 51
你想要一个检查约束.
CHECK约束从逻辑表达式确定有效值,该逻辑表达式不基于另一列中的数据.例如,可以通过创建CHECK约束来限制工资列的值范围,该约束仅允许范围从$ 15,000到$ 100,000的数据.这可以防止工资超出正常工资范围.
你想要的东西:
ALTER TABLE dbo.Table ADD CONSTRAINT CK_Table_Frequency
CHECK (Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly'))
Run Code Online (Sandbox Code Playgroud)
您还可以使用标量函数实现检查约束,如上面的链接所述,这是我喜欢的方式.
gbn*_*gbn 11
就个人而言,我将其编码为tinyint并且:
原因:
存储文本平均需要8个字节,tinyint需要1个字节.超过数百万行,这将有所作为.
整理怎么样?"每日"与"每日"相同吗?进行这种比较需要资源.
最后,如果你想添加"Biweekly"或"Hourly"怎么办?当您只需将新行添加到查找表时,这需要更改架构.
编辑表时,
右键单击->检查约束->添加-> Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly')在表达式字段中键入类似内容,并在(名称)字段中键入良好的约束名称。
大功告成