如何使用多个LIKE语句正确设置CHECK约束?

问题描述 投票:0回答:2

我正在尝试执行一个简单的规则来插入bank_account列的值:

 - bank account can consist of only digits
 - bank account can have one hyphen '-' or zero hyphens
 - bank account can have one slash '/' or zero slashes

我有此检查约束:

alter table someTable
add constraint chk_bank check
(
    (bank_account not like '%-%-%')
    and
    (bank_account not like '%/%/%')
    and
    (bank_account not like '%[^0123456789\-/]%')
)

而且我有这些银行帐号(它们是虚构的:]:>

12-4414424434/0987
987654321/9999
NULL
41-101010101010/0011
500501502503/7410
NULL
60-6000070000/1234
7987-42516/7845
NULL
12-12121212/2121

启用约束时出现此错误:

The ALTER TABLE statement conflicted with the CHECK constraint "chk_bank".
The conflict occurred in database "x", table "someTable", column 'bank_account'.

我尝试了一些选择查询,但找不到正确的数字。

我的检查约束写错了吗?如果是这样,我应该如何更改它以满足我的要求?检查约束会忽略NULL值还是这些问题?

我正在尝试执行一个简单的规则来插入bank_account列的值:-银行帐户只能包含数字-银行帐户可以有一个连字符'-'或零个连字符-银行帐户...

tsql pattern-matching sql-like
2个回答
1
投票

检查逻辑的简单方法是分别选择条件,例如:


1
投票

According to the documentation,默认情况下没有转义字符。您必须使用escape子句来表示反斜杠是转义字符:

© www.soinside.com 2019 - 2024. All rights reserved.