我需要创建不允许插入重复值的过程,并且过程必须检查列" zipcode"格式有效(仅限5位数)。
我还没有找到合适的解决方案,这也是我写这篇文章的原因。
提前感谢您的帮助!
编辑:我知道有限制的约束,但我正在为招聘工作做分配,我必须通过程序来实施。
顺便说一下,MS SQL中是否有来自MySQL的关键字 new ?我需要那样做我想要的我相信......
答案 0 :(得分:0)
您好,我可以使用类似的东西
ALTER TABLE your_table
ADD CONSTRAINT chk_your_table CHECK (zipcode LIKE '[0-9][0-9][0-9][0-9][0-9]')
重复使用UNIQUE
答案 1 :(得分:0)
使用存储过程的问题是,如果任何用户对表具有UPDATE权限,他们可以绕过您的检查并添加无效和重复数据,那么您应该使用表上的表约束来处理这个或触发器: / p>
CREATE TABLE #Zip
(
[Id] INT PRIMARY KEY Identity,
[ZIPCode] VARCHAR(5) UNIQUE NOT NULL
CONSTRAINT CK_ZIPCode CHECK ( [ZIPCode] LIKE '[0-9][0-9][0-9][0-9][0-9]' ),
Place VARCHAR(20) NOT NULL
)
现在,如果您运行以下插入内容:
Insert into #Zip VALUES ('12345', 'MyPlace')
Insert into #Zip VALUES ('12345', 'MyPlace2')
Insert into #Zip VALUES ('A2345', 'MyPlace3')
Insert into #Zip VALUES ('13345', 'MyPlace4')
第一个成功, 第二个失败了
违反UNIQUE KEY约束
第三个失败了:
INSERT语句与CHECK约束冲突 “CK_ZIPCode”。
并且第4次成功。
对于任何更复杂的检查,您应使用TRIGGER
。