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

Sql server 如何设置约束以将Char字段限制为一组值?,sql-server,custom-fields,type-constraints,Sql Server,Custom Fields,Type Constraints,我今天在放屁。在SQL Server(目前使用的是2008)中,如何设置一个char字段,使其仅接受一系列特定的char(大约八个区分大小写的字母)?我需要在几个表中重复使用这个“自定义字段” 我知道我可以设置另一个表并对其设置外键约束。这是唯一的方法吗?您可能需要考虑创建检查约束。这篇文章有一个匹配的模式,你可以用它来构建: 为了获得区分大小写的匹配,请删除模式中的“a-z”,并使用区分大小写的排序规则创建检查约束。即使服务器和数据库不区分大小写,这也确保了区分大小写的匹配。如果使用双负结构

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


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

您可能需要考虑创建检查约束。这篇文章有一个匹配的模式,你可以用它来构建:


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

如果使用双负结构,这只允许字符A到H

ALTER TABLE MyTable WITH CHECK
   CONSTRAINT CK_MyTable_MyColChars CHECK (
     MyColChars COLLATE Latin1_General_BIN NOT LIKE '%[^ABCDEFGH]%'
     )
要重复使用,请使用自定义项

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
     )

如果您想要一个F、分号和空格,它应该是
'%[^ABCDEF;]%
例如

我们需要更多关于您试图定义的约束性质的细节。只有A-Z?区分大小写?嵌入空间?具体的角色系列?@Philip抱歉。我刚刚更新了我的问题。我希望我能给你另一个+1的80年代图片,乌鱼和所有!