判断除了主键外数据相等

今天遇到一个比较怪异的问题,写出自己的一个解决方案供大家参考。希望讨论出更好的解决方案。

表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

个人感觉这个方法仅适用于数据量不大的情况如果大的话就要想别的方式了

posted @ 2009-04-08 20:48  蚕宝宝  阅读(169)  评论(0编辑  收藏  举报