希望当更新或插入操作不成功的时候,SQLSERVER的存储过程能返回一个信息
论坛上的各位朋友,小弟总共有4个问题,都写在存储过程里面了,希望有朋友能帮忙解决小弟的问题,谢谢!!!
ALTER procedure KaoQinInsertUpdateEmployee
@emp_id nvarchar(50),@card_id nvarchar(20),@insert_update varchar(10)
as
if @insert_update= 'insert '
begin
/* 问题1:想先对传进来的@emp_id作一个SELECT(select * from 表 where emp_id=@emp_id),如果SELECT的结果不为空(因为表的emp_id字段不能重复)就将返回值赋值为: “emp_id这个字段不能重复,请注意”
然后不继续执行后面的语句,直接退出这个存储过程,并将返回值带出
*/
insert into employee (emp_id,card_id,) values (@emp_id,@card_id)
/* 问题2:如果插入成功,则将返回值赋值为“成功”,然后不继续执行后面的语句,直接带出返回值*/
end
if @insert_update= 'update '
begin
/* 问题3:想先对传进来的@card_id作一个SELECT(select * from 表 where card_id=@card_id),如果SELECT的结果不为空(因为表的card_id字段不能重复)就将返回值赋值为: “card_id这个字段不能重复,请注意”
然后不继续执行后面的语句,直接退出这个存储过程,并将返回值带出
*/
update employee set card_id=@card_id, where emp_id=@emp_id
/* 问题4:如果更新成功,则将返回值赋值为“成功” */
end
[解决办法]
ALTER procedure KaoQinInsertUpdateEmployee
@emp_id nvarchar(50),@card_id nvarchar(20),@insert_update varchar(10),@return varchar(100)
as
if @insert_update= 'insert '
begin
/* 问题1:想先对传进来的@emp_id作一个SELECT(select * from 表 where emp_id=@emp_id),如果SELECT的结果不为空(因为表的emp_id字段不能重复)就将返回值赋值为: “emp_id这个字段不能重复,请注意”
然后不继续执行后面的语句,直接退出这个存储过程,并将返回值带出*/
if exists (select 1 from 表 where emp_id=@emp_id)
begin
set @return= 'emp_id这个字段不能重复,请注意 '
return
end
else
begin
/*问题2:如果插入成功,则将返回值赋值为“成功”,然后不继续执行后面的语句,直接带出返回值*/
insert into employee (emp_id,card_id) values (@emp_id,@card_id)
set @return= '成功 '
return
end
end
if @insert_update= 'update '
begin
/* 问题3:想先对传进来的@card_id作一个SELECT(select * from 表 where card_id=@card_id),如果SELECT的结果不为空(因为表的card_id字段不能重复)就将返回值赋值为: “card_id这个字段不能重复,请注意”
然后不继续执行后面的语句,直接退出这个存储过程,并将返回值带出*/
if exists (select 1 from 表 where card_id=@card_id)
begin
set @return= 'card_id这个字段不能重复,请注意 '
return
end
else
begin
/*问题4:如果更新成功,则将返回值赋值为“成功”*/
update employee set card_id=@card_id where emp_id=@emp_id
set @return= '成功 '
end
end
[解决办法]
ALTER procedure KaoQinInsertUpdateEmployee
@emp_id nvarchar(50),@card_id nvarchar(20),@insert_update varchar(10),
@message varchar(50) output --增加一个参数
as
if @insert_update= 'insert '
begin
-- 问题1:
if exists (select * from 表 where emp_id=@emp_id)
begin
set @message = 'emp_id这个字段不能重复,请注意 '
break
end
-- 问题2:
insert into employee (emp_id,card_id,) values (@emp_id,@card_id)
if (@@rowcount > 0)
begin
set @message = '成功 '
break
end
end
if @insert_update= 'update '
begin
-- 问题3:
if exists (select * from 表 where card_id=@card_id)
begin
set @message = 'card_id这个字段不能重复,请注意 '
break
end
-- 问题4:
update employee set card_id=@card_id, where emp_id=@emp_id
if (@@rowcount > 0)
begin
set @message = '成功 '
break
end
end
[解决办法]
ALTER procedure KaoQinInsertUpdateEmployee
@emp_id nvarchar(50),@card_id nvarchar(20),@insert_update varchar(10)
as
if @insert_update= 'insert '
begin
declare @i int
select @i=count(*) from 表 where emp_id=@emp_id
if(@i> =1)
begin
raiserror( '“emp_id这个字段不能重复,请注意” ',16,1)
return
end
/* 问题1:想先对传进来的@emp_id作一个SELECT(select * from 表 where emp_id=@emp_id),如果SELECT的结果不为空(因为表的emp_id字段不能重复)就将返回值赋值为: “emp_id这个字段不能重复,请注意”
然后不继续执行后面的语句,直接退出这个存储过程,并将返回值带出
*/
insert into employee (emp_id,card_id) values (@emp_id,@card_id)
if(@@error <> 0)
begin
raiserror( '“emp_id这个字段不能重复,请注意” ',16,1)
return
end
/* 问题2:如果插入成功,则将返回值赋值为“成功”,然后不继续执行后面的语句,直接带出返回值*/
end
if @insert_update= 'update '
begin
select @i=count(*) from 表 where card_id=@card_id
if(@i> =1)
begin
raiserror( '“card_id这个字段不能重复,请注意” ',16,1)
return
end
/* 问题3:想先对传进来的@card_id作一个SELECT(select * from 表 where card_id=@card_id),如果SELECT的结果不为空(因为表的card_id字段不能重复)就将返回值赋值为: “card_id这个字段不能重复,请注意”
然后不继续执行后面的语句,直接退出这个存储过程,并将返回值带出
*/
update employee set card_id=@card_id where emp_id=@emp_id
if(@@error <> 0)
begin
raiserror( '“emp_id这个字段不能重复,请注意” ',16,1)
return
end
/* 问题4:如果更新成功,则将返回值赋值为“成功” */
end
[解决办法]
存储过程加一output参数,用于输出结果
ALTER procedure KaoQinInsertUpdateEmployee
@emp_id nvarchar(50),@card_id nvarchar(20),@insert_update varchar(10),@return varchar(50) output
将需要的输出的结果放入@return中
调用存储过程时,@return参数后要加output
实际相当于加一变量参数