我正在创建一个程序,它将数据插入到一个非常简单的表中
但我的问题是我希望我的插入语句确保它不会插入重复数据
我想以某种方式检查数据进入的表,以确保没有一行具有相同的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())
但它仍会插入重复项。
答案 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
约束,服务器不允许您插入重复的行。