• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

存储过程事务问题

huangwenquan123 2011-04-06 04:05:28

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。

是不是把表锁住了?
...全文
53 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
bill024 2011-04-06
lz不能修改表名的,sql server会进行语法检查,没有这个表名肯定会提示错误了,要首先保证语法正确。
回复
幸运的意外 2011-04-06
看错误提示是因为事务嵌套出了问题。
回复
huangwenquan123 2011-04-06
[Quote=引用 2 楼 xuam 的回复:]
改错表名跟回滚没多大关系吧?
[/Quote]
改错后不是执行失败 然后数据回滚吗?
为什么会锁住表好一会,过一会后才可以查询呢?
请指教下!
回复
xuam 2011-04-06
改错表名跟回滚没多大关系吧?
回复
huangwenquan123 2011-04-06
用sql 2005打开表的时候执行了好一会(表里数据不多),然后抱错说查询超时,
程序执行抱错提示
对象名 'LogControls' 无效。
EXECUTE 后的事务计数指示缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。上一计数 = 0,当前计数 = 1。

这是什么情况?我只不过是要看下会不会回滚额!
sql知识要好好加强下了!
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2011-04-06 04:05
社区公告
暂无公告