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 --调用存储过程