none
sqlserver如何操作迸发插入数据到同一张表? RRS feed

  • 问题

  • 现在有个情况就是在插入数据到数据表前需要判断是否已经存在对应的字段,比如表名为:Table1,分别有字段A,B,C,现在并发执行插入数据到表A中,要求字段A不能重复。以下是我的SQL代码:

    if not exists(select * from table1 where A=@a)

    begin

    insert into table1(A,B,C)

    select @a,@b,@c

    end

    在模拟多用户操作的情况下这种写法会存在插入重复的记录。请教下有什么办法能实现不重复插入呢?

    2013年9月5日 10:44

答案

  • 用事务,读的时候加X锁。

    想不想时已是想,不如不想都不想。

    • 已标记为答案 zyyjc 2013年9月26日 5:01
    2013年9月6日 5:04
    版主
  • nsert into table1(A,B,C)

    select @a,@b,@c

    where

    not exists(select * from table1 where A=@a)

    另外, 如果你可以把唯一键的 ignore_dup_key 选项打开, 这样重复的数据插入不会报错, 也不会插入, 你可以通过在 insert 之后检查 @@rowcount 来确定是插入成功, 还是被自动过滤了

    2013年9月6日 11:16

全部回复