set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[Order_Already]
(
@OID int,@ProductAllMoney decimal(10,2),@MID int,@OrderNo varchar(200),@OrderCheck int,
@OrderItemsCount int,
@MA_ID int,@MA_RealName varchar(50),@C_Info text,@C_Addtime datetime,
@C_IntoMemb varchar(255),@C_Type int,@C_Result int,@LC_ID int
)
as
declare @MembMoney decimal(10,2),@HaveCount int
set @MembMoney = (select MembMoney from Member_Tbl where MID=@MID)
set @HaveCount = (select count(1) from OrderItems_Tbl o inner join Inventory_Tbl i on o.PIID=i.PIID where OrderNo=@OrderNo and InveQty>=OIQuantity)
if(@MembMoney>=@ProductAllMoney)
begin
if(@HaveCount=@OrderItemsCount)
begin
begin Transaction T
update Member_Tbl set MembMoney=MembMoney-@ProductAllMoney,MembXFMoney=MembXFMoney+@ProductAllMoney 
where MID=@MID
update a set InveQty=InveQty-b.OIQuantity,SellQty=SellQty+b.OIQuantity
from Inventory_Tbl a,(select PIID,OIQuantity from OrderItems_Tbl where OrderNO=@OrderNo) b
where a.PIID=b.PIID
update Orders_Tbl set OrderOutime=getdate(),OrderCheck=@OrderCheck where OID=@OID
insert into LogControls_Tbl(MA_ID,MA_RealName,C_Info,C_Addtime,C_IntoMemb,C_Type,C_Result,LC_ID)
values(@MA_ID,@MA_RealName,@C_Info,@C_Addtime,@C_intoMemb,@C_Type,@C_Result,@LC_ID)
if @@error<>0
begin
rollback transaction T
return 0
end
else
begin
commit transaction T
return 1
end
end
else
return -2
end
else
begin
return -1
end我写了个存储过程,存储过程里面用了事务,然后故意把其中一个表名改错,看会不会回滚,可是表名改错后查询上面那些表就用不了了,还抱错
对象名  'LogControls' 无效。
EXECUTE 后的事务计数指示缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。上一计数 = 0,当前计数 = 1。

是不是把表锁住了?

解决方案 »

  1.   

    用sql 2005打开表的时候执行了好一会(表里数据不多),然后抱错说查询超时,
    程序执行抱错提示
    对象名 'LogControls' 无效。
    EXECUTE 后的事务计数指示缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。上一计数 = 0,当前计数 = 1。这是什么情况?我只不过是要看下会不会回滚额!
    sql知识要好好加强下了!
      

  2.   

    lz不能修改表名的,sql server会进行语法检查,没有这个表名肯定会提示错误了,要首先保证语法正确。