首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

存储过程数据重复有关问题

2012-12-17 
存储过程数据重复问题在用户向表1提交新数据的时候 先给表1 做个查询检查是否有与字段A,有相同的数据有的

存储过程数据重复问题
在用户向表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

热点排行