SQLSERVER重复插入数据

李察德-泰森 发布于 2013/05/28 11:23
阅读 1K+
收藏 0
数据库是SQLSERVER2008版的,使用事务在存储过程中存放数据,使用了一年时间,发现有两笔数据重复插入了。因为在插入数据前会进行逻辑检查,所以重复插入数据应该是不可能发生的。但是现在发现的两笔数据是在很短的时间里同时插入的,比如,第一笔数据插入时间是"2013-05-27 12:45:34:123",第二笔数据是" 2013-05-27 12:45:34:236"。不知这是什么情况?

以下是问题补充:

@李察德-泰森:修改下问题的描述:因为实际业务数据的需要,所以实际上不只是这一个表的数据插入,还有另外的表的数据更新和插入。另外这个重复的数据里实际是记录的流水帐,这个流水帐的根据是根据另外表的唯一记录来确定的。前面的逻辑检查是对这个唯一表数据的,这个表中的数据可以更新才会插入一笔流水帐,在唯一记录表更新后,这个流水帐不会再插入相同的数据。现在的实际情况是唯一记录的表只更新了一次,流水帐表插入了两次数据。这些数据的更新,插入都是在一个事务中提交的。 (2013/05/28 12:10)
加载中
0
戴威
戴威
缺少重复提交检查。
0
李察德-泰森
李察德-泰森

引用来自“戴威”的答案

缺少重复提交检查。
我说了,是在事务中提交的,提交数据前会有逻辑检查的
0
戴威
戴威

引用来自“nowayout”的答案

引用来自“戴威”的答案

缺少重复提交检查。
我说了,是在事务中提交的,提交数据前会有逻辑检查的
程序检查还是数据库检查?
0
李察德-泰森
李察德-泰森

引用来自“戴威”的答案

引用来自“nowayout”的答案

引用来自“戴威”的答案

缺少重复提交检查。
我说了,是在事务中提交的,提交数据前会有逻辑检查的
程序检查还是数据库检查?
数据库检查
0
戴威
戴威

引用来自“nowayout”的答案

引用来自“戴威”的答案

引用来自“nowayout”的答案

引用来自“戴威”的答案

缺少重复提交检查。
我说了,是在事务中提交的,提交数据前会有逻辑检查的
程序检查还是数据库检查?
数据库检查
触发器、唯一字段还是别的?
0
李察德-泰森
李察德-泰森

引用来自“戴威”的答案

引用来自“nowayout”的答案

引用来自“戴威”的答案

引用来自“nowayout”的答案

引用来自“戴威”的答案

缺少重复提交检查。
我说了,是在事务中提交的,提交数据前会有逻辑检查的
程序检查还是数据库检查?
数据库检查
触发器、唯一字段还是别的?
在数据库的存储过程中
0
顺其自然001
顺其自然001
用select检查?事物没提交?检查时用with (nolock)试试。
0
李察德-泰森
李察德-泰森

引用来自“dana.gao”的答案

用select检查?事物没提交?检查时用with (nolock)试试。
是的,查询都使用的nolock,更新使用的行锁,插入不知道是不是也有锁
0
李察德-泰森
李察德-泰森
还有人遇到类似情况吗
0
王瑞平
王瑞平

传说中的并发,两个操作几乎同时完成的

高并发下只有数据库字段唯一能避免这种情况

返回顶部
顶部