判断除了主键外数据相等
今天遇到一个比较怪异的问题,写出自己的一个解决方案供大家参考。希望讨论出更好的解决方案。
表A结构
ID FID COL1 COL2
072a9639-e23a-453a-83ad-a0a1d8b85da6 5c0a1fe1-189a-498c-846a-6f9b01de7bb0 null aaa
52e9ee9a-ac08-41d6-8578-0e6cc7849a0c 9ddeccc6-e2f4-4be4-9071-7b70cbfdc71f bbb aaa
其中ID为主键 FID为外键,功能是相表A中插入一条数据,数据仍是有表A的数据来的数据,操作如下
insert into A(ID ,FID,COL1,COL2) Select NewID() as ID ,NewID() as FID, COL1 COL2 where FID=@FID
在插入之前只是知道@FID 但是在此之前要判断表中是否已经含有相同的数据,利用Union all 与union的区别可以进行判断
CREATE PROCEDURE Duplicate
@FIDnvarchar(50)
AS
declare @total1 int
declare @total2 int
select @total1=count(*) from
(
select distinct COL1 COL2 from A
union all
select COL1 COL2 from A where FID=@FID
) as a
select @total2=count(*) from
(
select distinct COL1 COL2 from A
union
select COL1 COL2 from A where FID=@FID
) as b
--当含有重复数据时返回1 否则返回-1
if(@total1-@total2)>0
BEGIN
select '1' as returnvalue
END
else
BEGIN
select '-1' as returnvalue
END
END
BEGIN
个人感觉这个方法仅适用于数据量不大的情况如果大的话就要想别的方式了