首页 > 解决方案 > SQL Server Management Studio - 文本选项的列约束

问题描述

我有一个简单的 SQL Server Management Studio 数据库,其中包含几个表。在每个表中都有几列。某些列我想要一个仅允许在约束中预定义的值的约束。

例如,一列名为 Valid(数据类型 = nchar(10)),我允许的唯一输入是 No 和 Yes。我能够完成这项工作:

Valid IS ('No', 'Yes')

SQL Server Management Studio 将其转换为:

([Valid]='No' OR [Valid]='Yes')

所以,这行得通,我测试了它。我在其他表中尝试了另外几列,但没有任何效果。我没有粘贴代码以避免隐藏字符。我将数据类型更改为 text、ntext,但它们仍然不起作用。

我希望这样的东西可以工作(目前不使用上面的任何语法示例):

([Location]='Outside' OR [Location]='Inside' OR [Location]='Around Building')

有什么想法吗?谢谢!

标签: sql-serverconstraints

解决方案


使用 TSQL 创建或更改表,例如:

CREATE TABLE foo (
    bar NCHAR(10) NOT NULL CONSTRAINT CK_foo_bar CHECK (bar IN (N'No', N'Yes'))
)

或者

ALTER TABLE foo WITH CHECK ADD 
   CONSTRAINT CK_foo_bar CHECK (bar IN (N'No', N'Yes'))

或受限:

([bar]=N'Yes' OR [bar]=N'No')

推荐阅读