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

发布于 2024-08-25 05:39:31 字数 180 浏览 10 评论 0原文

有没有办法为 MS SQL Server 2008 中的 varchar 列指定 4 个不同的值?

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

创建表时是否可以在 SQL Server Management Studio 中设置?

Is there a way to specify, for example 4 distinct values for a varchar column in MS SQL Server 2008?

For example, I need a column called Frequency (varchar) that only accepts 'Daily', 'Weekly', 'Monthly', 'Yearly' as possible values

Is this possible to set within the SQL Server Management Studio when creating the table?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

濫情▎り 2024-09-01 05:39:31

您是否已经考虑过在该列上添加一个检查约束来限制值?像这样的东西:

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

Have you already looked at adding a check constraint on that column which would restrict values? Something like:

CREATE TABLE SomeTable
(
   Id int NOT NULL,
   Frequency varchar(200),
   CONSTRAINT chk_Frequency CHECK (Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly'))
)
挽你眉间 2024-09-01 05:39:31

您需要一个检查约束

CHECK 约束确定有效值
从不是的逻辑表达式
基于另一列中的数据。为了
例如,a 的值范围
工资栏可以限制为
创建一个 CHECK 约束
仅允许数据范围为
15,000 美元到 100,000 美元。这
阻止输入工资
超出正常工资范围。

您想要类似的东西:

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

您还可以使用标量函数实现检查约束,如上面的链接中所述,这就是我更喜欢的方式。

You want a check constraint.

CHECK constraints determine the valid values
from a logical expression that is not
based on data in another column. For
example, the range of values for a
salary column can be limited by
creating a CHECK constraint that
allows for only data that ranges from
$15,000 through $100,000. This
prevents salaries from being entered
beyond the regular salary range.

You want something like:

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

You can also implement check constraints with scalar functions, as described in the link above, which is how I prefer to do it.

木落 2024-09-01 05:39:31

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

  • 要么:在客户端将其更改为文本,检查1到4之间的约束
  • 要么:使用带有外键的查找表

原因:

  • 平均需要8个字节来存储文本,tinyint 为 1 个字节。对于数百万行,这将产生影响。

  • 整理怎么样? “每日”和“每日”一样吗?进行这种比较需要资源。

  • 最后,如果您想添加“双周”或“每小时”怎么办?当您只需向查找表添加新行时,这需要更改架构。

Personally, I'd code it as tinyint and:

  • Either: change it to text on the client, check constraint between 1 and 4
  • Or: use a lookup table with a foreign key

Reasons:

  • It will take on average 8 bytes to store text, 1 byte for tinyint. Over millions of rows, this will make a difference.

  • What about collation? Is "Daily" the same as "DAILY"? It takes resources to do this kind of comparison.

  • Finally, what if you want to add "Biweekly" or "Hourly"? This requires a schema change when you could just add new rows to a lookup table.

公布 2024-09-01 05:39:31

当您编辑表格时
右键单击->检查约束->添加->在表达式字段中输入类似 Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly') 的内容,并在 (Name) 字段中输入一个合适的约束名称。
你完成了。

When you are editing a table
Right Click -> Check Constraints -> Add -> Type something like Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly') in expression field and a good constraint name in (Name) field.
You are done.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文