2016-01-22 26 views
0

我有一个场景,我在该表中插入了多个记录,即使执行了检查,我也会解释下面的代码流。在事务中重复插入

BEGIN Transection; 
var model = select id from table1 where outlet_code = 123 and survey_id = 5 
if(model){ 
    throw new Exception("Outlet is already Surveyed."); 
}else{ 
    INSERT Record into the table 
} 
Commit Transection; 

问题: 我从移动端获得多个请求上传的调查,但是当我用同一个插座代码多个请求出现问题。

First Request outlet_code = 123abc and survey_id = 5 
Second Request outlet_code = 123abc and survey_id = 5 

点是第二个请求不应然而,在某些情况下,这两个记录插入到了在“表1”

我测试了此方案中的代码中插入,但我得到的例外,这是好的,但在数据库中有违反这种条件的记录,并且我在数据库中得到了两条记录

好心地暗示我做错了什么,我只是有一个想法,它可能是事务提交顺序的问题,但我不'不知道如何解决这种情况。

数据库为SQL Server 2008的

+1

'PRIMARY KEY WITH(IGNORE_DUP_KEY = ON)'? – Devart

+0

你使用的是什么db 1)mysql 2)postgresql or ???? – Monty

+0

如果您使用的是postgresql,那么使用:UPSERT:如果数据已经退出,它将被修改,如果它不会插入表 – Monty

回答

0

最简单和干净的方式将被创建的ID columnn一个主键,以便表将不接受与ID冲突的任何插件。这将在第二次插入时引发错误,因此应该处理它。

+0

实际上有三列 id - pk outlet_code --- varchar survey_id ---- - varchar id是自动增量,唯一不需要的是具有相同surevey_id和相同outlet_code – muneeb

+0

的另一条记录,然后在这些列上创建一个唯一约束:ALTER TABLE table_name ADD CONSTRAINT constr_name UNIQUE(outlet_code,surevey_id); - 不确定这是否在sql-server中是相同的,但你明白了 – Jemo