这是事务栈被清空引起的问题。如果proa出错,事务栈被清空,返回prob时就出错。
1.proa 中不要使用事务,由prob来控制,就好了。2.事务不要嵌套
...
exec @a = proa
if ...
...
...
begin tran t2
...
3.使用保存事务,save trans
...
1.proa 中不要使用事务,由prob来控制,就好了。2.事务不要嵌套
...
exec @a = proa
if ...
...
...
begin tran t2
...
3.使用保存事务,save trans
...
解决方案 »
- *******************请教关于sqlserver锁的问题
- SQL server统计数据库表,各表的记录数
- 如何得到刚插入记录的ID(自动产生的)?
- SQL Server 2005 两视图View1,View2单独查询Select * from View1(View2) 都很快, 两视图关联很慢,为什么?
- SQL2005 Reporting Services 报表动态生成列?
- 远程数据库中的数据表导出为文本文件问题,不够可以加分,高手们进来看一看了谢谢了先111急!!!来者有分!!!!!!!
- 疑難問題,急﹔如何把一條記錄轉換為多條記錄?
- 为什么%不管用?
- 一个查询的问题怎么写
- 从sql server 到Oracle
- SQL SERVER 中的锁定问题
- 在sqlserver存储过程里里如果要把一条语句写成多行,应该怎么写??
as
SET XACT_ABORT ON --ADD THIS STATEMENT
begin
BEGIN TRAN T2
declare @b int
set @b=0
exec @b=ProA
if @b=1
begin
rollback tran T2
return 1
end
else
begin
commit tran T2
return 0
end
end
as
SET XACT_ABORT ON --ADD THIS STATEMENT
begin
BEGIN TRAN T2
declare @b int
set @b=0
exec @b=ProA
if @b=1 and @@error=0
begin
rollback tran T2
return 1
end
else
begin
commit tran T2
return 0
end
end
as
SET XACT_ABORT ON --ADD THIS STATEMENT
begin
BEGIN TRAN T2
declare @b int
set @b=0
exec @b=ProA
if @b=1 and @@error<>0
begin
rollback tran T2
return 1
end
else
begin
commit tran T2
return 0
end
end
SELECT '事务处理前', @@TRANCOUNT --值为 0
BEGIN TRAN
SELECT '第一个事务', @@TRANCOUNT --值为 1
SELECT * FROM table1
SAVE TRAN t1
SELECT '保存第一个事务后', @@TRANCOUNT --值为 1
BEGIN TRAN
SELECT '第二个事务', @@TRANCOUNT --值为 2
DELETE table1
ROLLBACK TRAN t1
SELECT '回滚到保存点t1', @@TRANCOUNT --注意这里的值为 2
IF @@TRANCOUNT>0
ROLLBACK TRAN
SELECT '处理结束', @@TRANCOUNT --为 0
你看看事务嵌套的例子SELECT '事务处理前', @@TRANCOUNT --值为 0
BEGIN TRAN
SELECT '第一个事务', @@TRANCOUNT --值为 1
SELECT * FROM cloth2
BEGIN TRAN
SELECT '第二个事务', @@TRANCOUNT --值为 2
DELETE cloth2
rollback tran
SELECT '回滚第二个事务', @@TRANCOUNT --值为 0
--rollback tran 这里不能再用了rollback tran 无论在哪一层使用 @@TRANCOUNT都将清为0