1

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

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

4

2 回答 2

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; ]%',例如

于 2011-05-13T15:26:20.943 回答
1

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

如何使 SQL Server 2008 检查表的约束只允许某些字符?

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

于 2011-05-13T14:44:36.990 回答