检查约束以强制大写字母和模式匹配

Aar*_*ght 3 database-design sql-server check-constraints

对于我的一个专栏,我试图强制执行一种模式。第一个字母应为D大写,其余 3 个字符应为数字。例如:

D678, D890,D000

我对CHECK约束和正则表达式之类的东西很陌生。

以下是我到目前为止所做的,(我认为)强制执行了一般模式。但是,当我尝试添加类似的东西d900时,即使它是小写的 d. 我预计这会失败。

有人可以帮忙吗:

CREATE TABLE Systems(
SystemsID NVARCHAR(4),
Title NVARCHAR(30),
CONSTRAINT chk_SystemsID CHECK (SystemsID LIKE '[D][0-9][0-9][0-9]'));
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 8

似乎数据库和列排序规则不区分大小写,因此LIKE表达式也不区分大小写。

在这种情况下执行区分大小写的比较的一种方法是添加一个COLLATE子句,指定区分大小写的归类。例如,如果您的数据库默认排序规则是不区分大小写的排序规则,例如 Latin1_General_CI_AS,下面的示例将使用文本排序规则的区分大小写版本覆盖该排序规则,并执行您想要的区分大小写的比较:

CREATE TABLE Systems(
    SystemsID NVARCHAR(4),
    Title NVARCHAR(30),
    CONSTRAINT chk_SystemsID CHECK (SystemsID LIKE '[D][0-9][0-9][0-9]' COLLATE Latin1_General_CS_AS)
);
Run Code Online (Sandbox Code Playgroud)

以下是供您阅读的相关整理文档页面: