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

точка является то, что второй запрос не должен быть вставлен в коде, однако в некоторых ситуациях обе записи вставляются в «table1»

Я испытал этот сценарий, но я получил исключение, которое прекрасно, но в базе данных есть записи, которые нарушают это условие, и я получил обе записи в базе данных.

любезно предлагаю, что я делаю неправильно, у меня просто есть идея, что это может быть проблема совершения транзакции, но я не знаю, не знаю, как решить эту ситуацию.

База данных SQL Server 2008.

+1

'ПЕРВИЧНЫЙ КЛЮЧ С (IGNORE_DUP_KEY = ON)'? – Devart

+0

какой db вы используете 1.) mysql 2.) postgresql или ???? – Monty

+0

Если вы используете postgresql, то используйте: UPSERT: он будет изменен, если данные уже завершены или если они не будут вставляться в таблицу – Monty

ответ

0

Самый простой и чистый способ будет создать первичный ключ ID columnn так таблица не будет принимать никаких вставок с дублирующими идентификаторами. Это вызовет ошибку, хотя на второй вставке, поэтому ее также нужно обработать.

+0

, то на самом деле есть три столбца id - pk outlet_code --- varchar survey_id ---- - varchar id - это автоматический прирост, единственное, что я не хочу, это еще одна запись с таким же surevey_id и таким же значением output_code – muneeb

+0

, а затем создать уникальное ограничение для этих столбцов: ALTER TABLE table_name ADD CONSTRAINT constr_name UNIQUE (outlet_code, surevey_id); - не уверен, что это действительно так же в sql-сервере, но вы получаете идею – Jemo

Смежные вопросы