2016-01-22 48 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