读书人

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

发布时间: 2012-12-17 09:31:40 作者: rapoo

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

读书人网 >SQL Server

热点推荐