Sql server SQL Server对字母和数字的类检查约束以及触发器
我在表的列上创建了一个简单的约束,它只接受前三个字母的3个大写字母,一个破折号“-”和后面的6个数字。到目前为止,我的插入被拒绝,因为: 我的限制:Sql server SQL Server对字母和数字的类检查约束以及触发器,sql-server,triggers,constraints,Sql Server,Triggers,Constraints,我在表的列上创建了一个简单的约束,它只接受前三个字母的3个大写字母,一个破折号“-”和后面的6个数字。到目前为止,我的插入被拒绝,因为: 我的限制: ALTER TABLE EQUIPOS ADD CONSTRAINT NOMBRE CHECK (idEnlace like('[A-Z][A-Z][A-Z]-[0-9][0-9][0-9][0-9][0-9][0-9]')) GO 所有CAP的触发器: CREATE TRIGGER TR_UPPER_NOMBRE ON EQUIPOS IN
ALTER TABLE EQUIPOS
ADD CONSTRAINT NOMBRE CHECK (idEnlace like('[A-Z][A-Z][A-Z]-[0-9][0-9][0-9][0-9][0-9][0-9]'))
GO
所有CAP的触发器:
CREATE TRIGGER TR_UPPER_NOMBRE
ON EQUIPOS
INSTEAD OF INSERT
AS
BEGIN
INSERT INTO equipos
SELECT UPPER(I.codEquipo),I.marcaEquipo,I.fchEquipo,I.vtoEquipo,I.idEnlace
FROM INSERTED I
END
GO
编辑:应为有效内容的示例:
'JHS-929323'
应该是无效的东西
'JHs-929323'
'JHS-99323'
'JHS929323'
我认为限制是错误的。Like之后发生的事情没有得到正确的验证。对以前做过类似事情的人有什么建议吗?创建一个类似这样的约束
ALTER TABLE EQUIPOS
ADD CONSTRAINT NOMBRE CHECK
(
LEFT(idEnlace,3) = UPPER(LEFT(idEnlace,3)) COLLATE Latin1_General_CS_AI
AND SUBSTRING(idEnlace,4,1) = '-'
AND RIGHT(idEnlace,6) NOT LIKE '%[^0-9]%'
AND LEN(idEnlace) = 10
)
GO
你的问题是什么?虽然我注意到你正在转换为大写的列与带有检查约束的列不同。为什么我的问题会被否决?我不在乎,但我很好奇,所以我可以用一种更好的方式问你。你没有问任何问题。您刚刚声明了一个需求并转储了一些代码。你也没有提供一个MVCE来说明你在代码中遇到的任何问题。@mitbanip:不是我的反对票,但是你没有提供任何方法来重现错误。发布查询、预期行为和观察到的行为。“这是我的查询,我希望查询可以这样做,但它可以这样做。”。
CREATE TABLE #TestTable
(ID INT identity(1,1), FirstCol VARCHAR(100),
CONSTRAINT FirstCol CHECK (FirstCol LIKE '%[A-Z][A-Z][A-Z]-[0-9][0-9][0-9][0-9][0-9]/M%'
or FirstCol LIKE '%[A-Z][A-Z][A-Z]-[0-9][0-9][0-9][0-9][0-9]/F%'))