简单的插入程序,检查重复

时间:2011-08-10 01:32:28

标签: sql stored-procedures sql-server-2000

我正在创建一个程序,它将数据插入到一个非常简单的表中

但我的问题是我希望我的插入语句确保它不会插入重复数据

我想以某种方式检查数据进入的表,以确保没有一行具有相同的indivualid和categoryid和值

所以,如果我要插入

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 个答案:

答案 0 :(得分:3)

您可以通过以下方式执行此操作:

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,因此条件变为true并始终插入数据。您可以将您的陈述更改为:

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()) 

我认为它也会起作用。

答案 1 :(得分:2)

ALTER TABLE individuory
ADD CONSTRAINT myConstarint
UNIQUE (categoryid, individualid, value)

答案 2 :(得分:1)

在(individualid,categoryid,value)上添加UNIQUE约束,服务器不允许您插入重复的行。

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