22,209
社区成员
发帖
与我相关
我的任务
分享
--解决方案1
#1.为表建立唯一索引(用唯一性校验的4个字段)
#2.各个线程用主键和唯一性字段校验,如果校验失败,则返回给客户ErrorCode.校验成功的拼insert语句
#3.调用存储过程insert,注意,此时还有可能产生重复的数据.
#4.解决#3的方法为,为每条insert语句加上 TRY CATCH,如果 CATCH 到的异常是主键冲突或唯一索引冲突,则证明其它线程已经insert此数据,返回给客户ErrorCode.
--解决方案2
#1.在进行每条insert语句时,加表锁.并做判断:
IF NOT EXISTS(SELECT 1 FROM tb WHERE keyField = @keyField)
AND NOT EXISTS(SELECT 1 FROM tb WHERE field1 = @field1 AND field2 = @field2 AND field3 = @field3 AND field4 = @field4)
BEGIN
--IINSERT INTO xxx("FunctionCode", "FunctionName") VALUES ('aaaaaaaaa', 'bbbbbbbbbb');
END
ELSE
BEGIN
--返回ErrorCode
END
--解决方案3
用另外一个表,让所有insert语句排队.相当于单线程操作.
http://adyhpq.blog.163.com/blog/static/3866700201011243538718/