CREATE TABLE PARTICIPANTE(
pasaporte NVARCHAR(9) NOT NULL,
nombre NVARCHAR(50) NOT NULL,
sexo CHAR(1) NOT NULL,
fecNac DATE NOT NULL,
codPais NVARCHAR(3) NOT NULL,
CONSTRAINT PK_PARTICIPANTE PRIMARY KEY (pasaporte),
CONSTRAINT FK_PAIS_PARTICIPANTE FOREIGN KEY (codPais) REFERENCES PAIS(codigo),
CONSTRAINT CHK_PASAPORTE CHECK (pasaporte like '^\[A-Z\]{3}\[0-9\]{6}$')
)
尝试插入数据时,CONSTRAINT CHK_PASAPORTE不起作用。
INSERT语句与CHECK约束“CHK_PASAPORTE”冲突。冲突发生在数据库“OMA”,表“dbo.PARTICIPANTE”,列“pasaport”中。
范例
insert into PARTICIPANTE (pasaporte,nombre,sexo,fecNac,codPais) value ('JPN865653','Noguchi','F','20000104','JPN');
有人能给我解释一下为什么这不起作用,我该如何修复它?
1条答案
按热度按时间x6492ojm1#
正如我在评论中提到的,SQL Server没有(内置的)对Regex的支持,它只有 * 基本 * 模式匹配,这在文档中有解释。
幸运的是,您所追求的逻辑似乎相当简单; 3个字母后跟6个数字。这可以通过以下约束条件实现:
请注意,如果您要求该值仅包含大写值,则需要将该值
COLLATE
为区分大小写得排序规则 * 并 * 先按大写字母排序,然后按小写字母排序,最后按字母顺序排序(二进制排序规则就是这样一种排序规则).