日期:2014-05-17  浏览次数:20537 次

存储过程数据重复问题
在用户向表1提交新数据的时候 先给表1 做个查询  检查是否有与字段A,有相同的数据  
有的话 就不让插入  返回该重复的字段内容 没有的话就插入一条提交过来的数据

现在已有存储过程如下:

ALTER procedure [dbo].[Pro_1]
@A       varchar(50),
@B           varchar(50),
@C           varchar(100),
@Remark1         varchar(50),
@Remark2         varchar(50)
as
begin
insert into Contact([A],[B],[C],[Remark1],[Remark2])
             Values(@A,@B,@C,@Remark1,@Remark2)
end

请问在插入之前   做个查询判断 应该怎么写?

 
------最佳解决方案--------------------
ALTER procedure [dbo].[Pro_1]
@A       varchar(50),
@B           varchar(50),
@C           varchar(100),
@Remark1         varchar(50),
@Remark2         varchar(50)
as
begin
if exists(select 1 from Contact where [A]=@a)
begin
return 0--已存在
end
else
begin
insert into Contact([A],[B],[C],[Remark1],[Remark2])
             Values(@A,@B,@C,@Remark1,@Remark2)
return 1--表示成功
end
end

------其他解决方案--------------------
ALTER procedure [dbo].[Pro_1]
 @A       varchar(50),
 @B           varchar(50),
 @C           varchar(100),
 @Remark1         varchar(50),
 @Remark2         varchar(50)
 as
 begin
if not exists (select 1 from contact where a=@a)
begin
 insert into Contact([A],[B],[C],[Remark1],[Remark2])
              Values(@A,@B,@C,@Remark1,@Remark2)
end
 end

------其他解决方案--------------------
这个用触发器很方便
------其他解决方案--------------------
不推荐使用触发器,还是在存储过程内判断比较稳妥。
ALTER procedure [dbo].[Pro_1]
@A       varchar(50),
@B           varchar(50),
@C           varchar(100),
@Remark1         varchar(50),
@Remark2         varchar(50)
as
begin
if exists(select 1 from Contact where [A]=@a)
begin
    return 0--已存在
end
else
begin
insert into Contact([A],[B],[C],[Remark1],[Remark2])
             Values(@A,@B,@C,@Remark1,@Remark2)
return 1--表示成功
end
end