SQL Server检查类似于字母和数字的约束,以及触发器

时间:2015-07-01 21:37:09

标签: sql-server triggers constraints

我在表格列上创建一个简单的约束,它只接受前三个字母的3个大写字母,一个短划线" - "以及随后的六个数字。到目前为止,我的插页因此被拒绝了:

我的约束:

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

触发所有上限:

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'

我认为约束是错误的。之后发生的事情并没有得到正确的验证。对于之前做过类似事情的人有什么建议吗?

2 个答案:

答案 0 :(得分:1)

创建一个像这样的约束....

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

答案 1 :(得分:-1)

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%'))