首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查@@ROWCOUNT失败

检查@@ROWCOUNT失败
EN

Database Administration用户
提问于 2019-03-19 19:17:32
回答 1查看 657关注 0票数 4

我在我的SQL过程中有一个类似于下面的代码,

代码语言:javascript
复制
declare @rowcount int

update table1
set value = @value
where id = @id

select @rowcount = @@ROWCOUNT

 if ( @rowcount = 0 )
 begin
    insert into table1(id, value1,value2...)
    select (@id, @value1, @value2...)
 end 

但是它很少失败,比如一天一次。这意味着数据存在于表中,@@rowcount为0,它试图插入数据和发生主键冲突。这里是插入ie的所有值。id、value1、value2等是整数。有什么想法吗?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2019-03-19 20:07:13

我不知道为什么要使用变量,但是您需要用一个事务保护多个语句。正在发生的情况是,两个用户同时调用这个过程,两个用户都得到了rowcount = 0,然后他们都试图进行插入。

代码语言:javascript
复制
set transaction isolation level serializable;
begin transaction;

update dbo.table1
  set value = @value
  where id = @id;

if (@@ROWCOUNT = 0)
begin
  insert dbo.table1(id, value1,value2...)
    values(@id, @value1, @value2...);
end 

commit transaction;

我在博客上写了这篇文章,因为我写了这个答案:

票数 15
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/232558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档