【发布时间】:2010-10-02 10:50:56
【问题描述】:
我有一个将记录插入到表中的存储过程。我在表上创建了唯一键约束以避免重复记录。
不管定义了唯一键约束这一事实,我都使用 IF() 条件(在 INSERT 语句之前)来检查可能已经存在的重复记录。
但是,我用来检查重复记录的条件语句似乎对是否执行 INSERT 没有影响。 - 即当向存储过程提交重复记录时,会抛出“违反 UNIQUE KEY 约束...”异常。
这是我的存储过程的示例:
BEGIN
if
(SELECT Count(f1)
FROM table
WHERE f1 = @f1
AND f2= @f2)
<= 0
BEGIN
INSERT INTO table
(f1,f2)
VALUES
(@f1, @f2)
RETURN @@IDENTITY
END
END
我的语法有问题吗?或者,也许,我做错了?
【问题讨论】:
-
这是在高负载下吗?两个并发事务都可以读取该行不存在,然后进入插入阶段。 Related Question 也与您的问题无关,但如果目标是返回最近插入的行的 id,您应该使用
scope_identity。
标签: sql sql-server tsql sql-server-2008 if-statement