2012-06-19 5 views
0

Я работаю над проектом на C#, используя sql-сервер в качестве базы данных. Поэтому проблема заключается в том, что в моем проекте есть алгоритм, который каждый раз возвращает одно значение; который сохраняется в базе данных (как мое требование к проекту). Если альго повторяет значение, это также будет сохраняться в базе данных, которая не требуется (дублирование) и вызывает некоторые проблемы. Мне нужна помощь для преодоления проблемы, когда уникальное значение сохраняется только один раз, когда это происходит; нет повторений в базе данных. Я попытался сделать этот столбец первичным ключом, но затем я обнаружил нарушение первичного ключа.Исключение первичного ключевого дублирования

+0

Сообщение код используется для сохранения значения к базе данных. Затем мы можем изменить его в соответствии с вашими потребностями. Например, только вставка, если значение еще не существует, и/или подтверждение того, было ли вставлено значение или значение уже присутствовало. – MatBailie

ответ

4

просто использовать EXISTS запрос либо в линию или в хранимой процедуре

Ваша процедура запроса может проверить, если строка уже существует

Edit: Aha жаль забыла НЕ, что было бы глупо: D

IF NOT EXISTS(SELECT UniqueValue FROM UniqueValuesTable WHERE UniqueValue = @NewValue) 
    INSERT INTO UniqueValuesTable VALUES (@NewValue) 

Edit: вот SQL скрипку, чтобы показать это работает

http://sqlfiddle.com/#!3/b87f9/3

Как Демс указывалось, операция не атомная, поэтому в нескольких сессии ситуации не может быть нарушение PK еще

Альтернатива есть:

INSERT INTO UniqueValuesTable SELECT @NewValue WHERE NOT EXISTS (SELECT UniqueValue FROM UniqueValuesTable WHERE UniqueValue = @NewValue) 
+0

Я не выбираю значение из таблицы, я вставляю значение из algo в базу данных. –

+0

Да, и это то, что делает этот запрос - проверяет, существует ли уже существующее значение, и если оно не вставляет его – Charleh

+0

INSERT INTO damidata ("+ subject +") VALUES ('"+ d [i] .ToString() +" ') этот запрос damidata - это имя таблицы («+ subject +»), которое является правдивым, которое содержит имя colum и (' "+ d [i] .ToString() +" ') - это значения gatting из algorithem. –

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