我今天脑袋放屁。在 SQL Server(目前使用 2008)中,如何设置一个 char 字段以仅接受特定系列的字符(大约八个区分大小写的字母)?而且我需要在几个表中重新使用这个“自定义字段”。
我知道我可以设置另一个表并对其施加外键约束。这是唯一的方法吗?
我今天脑袋放屁。在 SQL Server(目前使用 2008)中,如何设置一个 char 字段以仅接受特定系列的字符(大约八个区分大小写的字母)?而且我需要在几个表中重新使用这个“自定义字段”。
我知道我可以设置另一个表并对其施加外键约束。这是唯一的方法吗?
如果您使用双重否定结构,则这只允许字符 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; ]%'
,例如
您可能需要考虑创建检查约束。这篇文章有一个匹配的模式,你可以建立:
如何使 SQL Server 2008 检查表的约束只允许某些字符?
为了获得区分大小写的匹配,请删除模式中的“az”并使用区分大小写的排序规则创建检查约束。即使服务器和数据库不区分大小写,这也确保了区分大小写的匹配。