调用存储过程的问题
PB调用Sql Server2000中的存储过程,如果存储过程中不加事务控制(CREATE PROCEDURE Sp_addproduct
@productid varchar(30),
@producttypecode varchar(20),
@productname varchar(50),
@product_jcname varchar(50),
@standard varchar(20),
@unit varchar(10),
@if_used bit
AS
If Not Exists(Select * From bs_productinfo where productcode = @productid)
Begin
Insert Into bs_productinfo(productcode,producttypecode,productname,product_jcname,standard,unit,if_used)
Values(@productid,@producttypecode,@productname,@product_jcname,@standard,@unit,@if_used);
Insert into bs_productstore (productcode,CurrentNum,summoney)
Values (@productid,0,0)
End
Else
Begin
Update bs_productinfo Set Producttypecode = @producttypecode,
productname = @productname,
product_jcname = @product_jcname,
standard = @standard,
unit = @unit,
if_used = @if_used where productcode = @productid;
End)在程序中调用的时候都很正常,但是如果在存储过程中加了事务管理(CREATE PROCEDURE Sp_addproduct
@productid varchar(30),
@producttypecode varchar(20),
@productname varchar(50),
@product_jcname varchar(50),
@standard varchar(20),
@unit varchar(10),
@if_used bit
AS
If Not Exists(Select * From bs_productinfo where productcode = @productid)
Begin
Begin Tran
Insert Into bs_productinfo(productcode,producttypecode,productname,product_jcname,standard,unit,if_used)
Values(@productid,@producttypecode,@productname,@product_jcname,@standard,@unit,@if_used);
Insert into bs_productstore (productcode,CurrentNum,summoney)
Values (@productid,0,0)
End
Else
Begin
Update bs_productinfo Set Producttypecode = @producttypecode,
productname = @productname,
product_jcname = @product_jcname,
standard = @standard,
unit = @unit,
if_used = @if_used where productcode = @productid;
End
If @@trancount > 0
Begin
Rollback Tran
End
Else
Commit Tran
GO
)在程序调用的时候就会弹出【commit transaction 请求没有对应的Begin transaction】
[解决办法]
- SQL code
If @@trancount > 0 Begin Rollback Tran End Else Commit Tran
[解决办法]
你把存储过程里
If @@trancount > 0
Begin
Rollback Tran
End
Else
Commit Tran
注释掉就行了