27,579
社区成员
发帖
与我相关
我的任务
分享
CREATE PROCEDURE pro
-- Add the parameters for the stored procedure here
@i nvarchar(20),
@j int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
--事物
-- Insert statements for procedure here
--事物
update table1
if(@@error>0)
--回滚
--事物提交
--事物
delete from table2
if(@@error>0)
--回滚
--事物提交
--异常回滚
--事物提交
END
GO
create table tb(id int identity(1,1),ic int unique)
insert into tb select 2
go
create proc pro
@i int,
@j int output,
@k int output
AS
BEGIN
begin try
begin tran
insert into tb select @i
set @j = 0
commit
end try
begin catch
rollback
set @j=1
end catch
begin try
begin tran
update tb set ic = 1 where id = @i
set @k = 0
commit
end try
begin catch
rollback
set @k=1
end catch
END
GO
declare @m int,@n int
exec pro 1,@m output,@n output
select * from tb
select @m,@n
drop proc pro
drop table tb
/***********
id ic
----------- -----------
1 2
2 1
(2 行受影响)
----------- -----------
0 1
(1 行受影响)
begin
set @update = 1
--回滚
end
if @@error<>0
begin
set @i=-1
rollback tran
return @i ----这里的renturn的值怎么取得到?
end
[Quote=引用 11 楼 wdmxznl 的回复:]SQL语句3
if @@error<>0
begin
rollback tran
return -1 ----这里的renturn的值怎么取得到?
end
create proc aaa
参数...
as
begin tran
SQL语句1
if @@error<>0
begin
rollback tran
return -1
end
SQL语句2
if @@error<>0
begin
rollback tran
return -1
end
SQL语句3
if @@error<>0
begin
rollback tran
return -1
end
commit tran
go
create PROCEDURE pro
@i nvarchar(20),
@j varchar(5) output
AS
BEGIN
declare @num datetime
begin try
begin tran
set @num=@i
set @j='成功'
commit
end try
begin catch
rollback
set @j='失败'
end catch
END
GO
declare @num varchar(5)
exec pro 'aa',@num output
select @num
/*失败*/
exec pro '20110811',@num output
select @num
/*成功*/
CREATE PROCEDURE pro
-- Add the parameters for the stored procedure here
@i nvarchar(20),
@j int,
@update int output,
@delete int output
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
--事物
-- Insert statements for procedure here
--事物
update table1
if(@@error>0)
begin
set @update = 1
--回滚
end
set @update = 0
--事物提交
--事物
delete from table2
if(@@error>0)
begin
set @delete = 1
--回滚
end
set @delete = 0
--事物提交
--异常回滚
--事物提交
END
GO
CREATE PROCEDURE pro
@i nvarchar(20),
@j int,
@Result BIGINT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT ON
BEGIN TRANSACTION
update table1
delete from table2
COMMIT TRANSACTION
SET @Result=1 --执行成功
END
GO