sql server - 检查INSERT中的行值是否已存在于数据库中的过程

时间:2017-02-21 13:01:52

标签: sql-server stored-procedures insert

我需要创建不允许插入重复值的过程,并且过程必须检查列" zipcode"格式有效(仅限5位数)。

我还没有找到合适的解决方案,这也是我写这篇文章的原因。

提前感谢您的帮助!

编辑:我知道有限制的约束,但我正在为招聘工作做分配,我必须通过程序来实施。

顺便说一下,MS SQL中是否有来自MySQL的关键字 new ?我需要那样做我想要的我相信......

2 个答案:

答案 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