判断除了主键外数据相等

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

表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

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

转载于:https://www.cnblogs.com/WormCanFly/archive/2009/04/08/1431983.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值