простая процедура вставки, проверьте наличие дубликатов - PullRequest
2 голосов
/ 10 августа 2011

Я создаю программу для вставки данных в таблицу, которая довольно проста

Но моя проблема в том, что я хочу, чтобы в операторе вставки не было дублирующих данных

Я хочу как-то проверить таблицу, в которую собираются данные, чтобы убедиться, что в ней нет строки с таким же индивидуальным значением и категорией и значением

Так что, если я вставляю

indivualid = 1
categorid = 1
value = 1

и в моей таблице есть строка с

indivualid = 1
categorid = 1
value = 2 

мои данные все равно будут вставлены

но если бы была строка с

indivualid = 1
categorid = 1
value = 1

тогда не будет

Я пробовал это

IF @value = 'Y'
OR @value = 'A'
OR @value = 'P'
AND NOT EXISTS
  (SELECT categoryid,
          individualid
   FROM ualhistory
   WHERE categoryid = @cat
     AND individualid = @id)
INSERT INTO individuory(categoryid, individualid, value, ts)
VALUES (@cat,
        @id,
        @yesorno,
        getdate())

но он все еще вставляет дубликаты.

Ответы [ 3 ]

3 голосов
/ 10 августа 2011

Вы можете сделать это следующим образом:

insert into 
individuory(categoryid, individualid, value, ts) 
VALUES (@cat, @id, @yesorno, getdate()) 
where not exists 
(select 1 from individuory where categoryid=@cat and individualid=@id)

Теперь точная проблема с вашим подходом состоит в том, что вы не связываете OR, и поэтому условие становится истинным и всегда вставляет данные. Вы можете изменить свое заявление на это:

if ((@value = 'Y' or @value = 'A' or @value = 'P') 
and not EXISTS 
(SELECT categoryid, individualid FROM ualhistory WHERE categoryid = @cat 
 and individualid = @id) )
 INSERT INTO individuory(categoryid, individualid, value, ts) 
 VALUES (@cat, @id, @yesorno, getdate()) 

И я думаю, что это также будет работать.

2 голосов
/ 10 августа 2011
ALTER TABLE individuory
ADD CONSTRAINT myConstarint
UNIQUE (categoryid, individualid, value)
1 голос
/ 10 августа 2011

Добавьте ограничение UNIQUE (individualid, categoryid, value), и сервер не позволит вам вставить повторяющуюся строку.

http://msdn.microsoft.com/en-us/library/ms189862.aspx

...