create PROCEDURE pro_test
@classID int
AS
BEGIN
SET NOCOUNT ON;
begin tran --开始事务
declare @error int; --临时变量
declare @id int
declare mycursor cursor --定义游标
for select id from test where classID=@classID --将数据导入游标
open mycursor --打开游标
fetch next from mycursor into @id --将游标中的数据导入临时变量中,多个变量以逗号隔开
while @@fetch_status =0 --游标循环
begin
--sql语句执行部分
delete from test where ClassID != @classID
if @@ERROR <>0 --执行失败,记录到临时变量
set @error =@error +1;
update test set name='在存储过程中使用事务和游标' where ID=@id
if @@ERROR <>0
set @error =@error +1;
fetch next from mycursor into @id --转向下一条数据
end --循环结束
close mycursor --关闭游标
deallocate mycursor --释放游标
if @error <>0 --执行失败,回滚事务
rollback tran;
else --执行成功,提交事务
commit tran;
END
GO
exec pro_test 1 --调用存储过程