Sql-Server

CHECK 強制執行大寫字母和模式匹配的約束

  • January 30, 2021

對於我的一個專欄,我試圖強制執行一種模式。第一個字母應為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]'));

似乎數據庫和列排序規則不區分大小寫,因此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)
);

以下是相關的校對文件頁面供您閱讀:

引用自:https://dba.stackexchange.com/questions/284344