如何设置约束以将字段限制为一组值?

时间:2011-05-13 13:55:36

标签: sql-server custom-fields type-constraints

我今天有一个大脑放屁。在SQL Server(当前使用2008)中,如何设置char字段以仅接受特定系列的字符(大约八个区分大小写的字母)?我需要在几个表格中重复使用这个“自定义字段”。

我知道我可以设置另一个表并对其设置外键约束。这是唯一的方法吗?

2 个答案:

答案 0 :(得分:2)

如果使用双阴性结构,则只允许使用字符A到H

ALTER TABLE MyTable WITH CHECK
   CONSTRAINT CK_MyTable_MyColChars CHECK (
     MyColChars COLLATE Latin1_General_BIN NOT LIKE '%[^ABCDEFGH]%'
     )

要重复使用,请使用udf

CREATE FUNCTION dbo.CheckChars (@Value varchar(100))
RETURNS bit
AS
BEGIN
   RETURN (CASE WHEN @Value NOT LIKE '%[^ABCDEFGH]%' THEN 1 ELSE 0 END)
END
GO

... CHECK (
      dbo.CheckChars (MyColChars) = 1
     )

如果您想要A_F,分号和空格,例如'%[^ABCDEF; ]%'

答案 1 :(得分:1)

您可能希望研究创建检查约束。这篇文章有一个你可以建立的匹配模式:

How to make SQL Server 2008 Check Constraint of a table Allow Only Certain characters?

为了获得区分大小写的匹配,请删除模式中的“a-z”并使用区分大小写的排序规则创建检查约束。即使服务器和数据库不区分大小写,也可以确保区分大小写匹配。