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

问题描述:

今天我有一个脑屁。在SQL Server中(目前使用2008),如何设置char字段来仅接受特定的一系列字符(大致是8个区分大小写的字母)?我需要在几张表中重新使用这个“自定义字段”。如何设置约束以将Char字段限制为一组值?

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

+1

我们需要一点(好的,很多)关于你试图定义的约束性质的更多细节。只有A-Z?区分大小写?嵌入式空间?特定系列的字符? – 2011-05-13 14:17:44

+0

@飞利浦对不起。我刚刚更新了我的问题。 – 2011-05-13 14:35:34

如果使用双重否定结构,这种只允许字符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; ]%'例如

+0

我希望我能给你80年代的图片,m鱼和所有的另一个+1! – 2011-05-13 15:39:43

你可能会想看看创建一个检查约束。这篇文章有,你可以建立过的匹配模式:

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

为了得到区分大小写的匹配,在模式中删除“A-Z”,并创建一个区分大小写的排序规则的检查约束。这确保了区分大小写的匹配,即使服务器和数据库不区分大小写。