事务出错,不知如何处理,请教各位大侠.急!谢了

lindanwu 2006-03-07 10:21:54
就是说我有一个事务,出错后,有这样一个提示不知如何处理.

信息如下:

EXECUTE 后的事务计数指出缺少了COMMIT或ROLLBACK TRANSACTION 语句.原计数=0,当前计数=1.
请问:
1、计数是如何产生的。
2、产生的计数在什么情况下可以清为0
3、如何避免这种错误。
...全文
70 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lindanwu 2006-03-07
是这样的程序先远行了一次,出错了,用同样的参数是没有这个提示的,但用别的参数再远行这个过程,则错误提示如上.是什么原因.我一直弄不明白
回复
lindanwu 2006-03-07
是不是中间的过程出错后没有清计数
回复
lindanwu 2006-03-07
代码如下,看是否问题

CREATE PROCEDURE XT_ZDSF
@LS_ZLH varchar(3) ,
@LS_SYH varchar(20) ,
@LS_GCZH varchar(20) ,
@LS_YSDJ varchar(12) ,
@LS_YHXS varchar(7),
@LS_SFMS tinyint,
@LS_FPH VARCHAR(10)='',
@LS_SFRY VARCHAR(10)='',
@LS_SFRQ VARCHAR(10)=''
AS
-------------------------------------启动事务
BEGIN TRAN
DECLARE @LS_STR VARCHAR(2000)
DECLARE @LS_XGQZH VARCHAR(20)
DECLARE @LS_XGQDJ VARCHAR(10)
DECLARE @LS_YHDJ varchar(12)
DECLARE @LS_SF VARCHAR(10)
DECLARE @LS_SFZL VARCHAR(4)
DECLARE @LS_SFBH VARCHAR(20)
DECLARE @LS_ZHLB VARCHAR(20)
DECLARE @LS_DJRQ VARCHAR(10)
DECLARE @LS_DJRY VARCHAR(10)
DECLARE @err int
SET @ERR=0
PRINT @LS_YHXS+'A'
-----------------------计算优惠价格
IF CONVERT(numeric(7,4),@LS_YHXS)>0
SET @LS_YHDJ=CONVERT(VARCHAR(12),CONVERT(numeric(12,2),@LS_YSDJ)*CONVERT(numeric(7,4),@LS_YHXS))
ELSE
SET @LS_YHDJ=@LS_YSDJ
-----------------------检查当前收费情况
SELECT TOP 1 @LS_SF=SF,@LS_XGQDJ=YHDJ,@LS_XGQZH=GCZH,@LS_SFZL=SFZL,@LS_SFBH=FPH,@LS_DJRY=DJRY,@LS_DJRQ=DJRQ
FROM SYTZ WHERE LTRIM(RTRIM(ZLH))=@LS_ZLH AND SYH=@LS_SYH
select @LS_SF,@LS_XGQDJ,@LS_XGQZH,@LS_SFZL
IF @LS_SFRY=''
SET @LS_SFRY=@LS_DJRY
IF @LS_SFRQ=''
SET @LS_SFRQ=@LS_DJRQ
--是否是在启用收费日期之后
IF exists(SELECT SFQYSJ FROM [NMB004JCZK].[DBO].[SYBHK] WHERE ZLH='A1' AND CONVERT(DATETIME,REPLACE(@LS_DJRQ,'.',''))<CONVERT(DATETIME,REPLACE(SFQYSJ,'.','')))
BEGIN
RETURN
END
----判断是否为自动收费
IF exists (SELECT SFZDSM FROM [NMB004JCZK].[DBO].SYBHK WHERE LTRIM(RTRIM(ZLH))=@LS_ZLH AND CHARINDEX('自动',SFZDSM)>0) OR (@LS_SFMS=2 AND @LS_SF<>'已收')
BEGIN
IF @LS_SF<>'已收'
BEGIN
--第一次委托
IF LEN(LTRIM(RTRIM(@LS_GCZH)))>0 --有帐号时工程帐号
EXEC LR1_PRG @LS_GCZH,@LS_YHDJ,@LS_YSDJ,@LS_YHXS,@LS_ZLH,@LS_SYH,@LS_SFRY,@LS_SFRQ,@LS_FPH
ELSE ------------无帐号或无效
EXEC UPDATE_SFZK @LS_ZLH,@LS_SYH,'','未收','',@LS_YHDJ,@LS_YSDJ,@LS_YHXS,'',''
END
ELSE --修改时
IF LEN(LTRIM(RTRIM( @LS_SFBH)))=0 AND CHARINDEX('现金',@LS_SFZL)=0 AND CHARINDEX('特批',@LS_SFZL)=0/*排除人工收费修改 */
IF LEN(LTRIM(RTRIM(@LS_XGQZH)))>0 /*--修改前为工程帐号时 */
IF LEN(LTRIM(RTRIM(@LS_GCZH)))>0 --修改后为工程帐号时
EXEC XG11_PRG @LS_GCZH,@LS_YHDJ,@LS_YSDJ,@LS_YHXS,@LS_XGQZH,@LS_XGQDJ,@LS_SF,@LS_SFZL,@LS_ZLH,@LS_SYH,@LS_SFRY,@LS_SFRQ
ELSE --修改后为无帐号时
EXEC XG12_PRG @LS_GCZH,@LS_YHDJ,@LS_YSDJ,@LS_YHXS,@LS_XGQZH,@LS_XGQDJ,@LS_SF,@LS_SFZL,@LS_ZLH,@LS_SYH,@LS_SFRY,@LS_SFRQ
ELSE /*--修改前无帐号或为空时*/
IF LEN(LTRIM(RTRIM(@LS_GCZH)))>0 --修改后工程帐号时
EXEC XG31_PRG @LS_GCZH,@LS_YHDJ,@LS_YSDJ,@LS_YHXS,@LS_XGQZH,@LS_XGQDJ,@LS_SF,@LS_SFZL,@LS_ZLH,@LS_SYH,@LS_SFRY,@LS_SFRQ
ELSE --修改后为无帐号
EXEC XG32_PRG @LS_GCZH,@LS_YHDJ,@LS_YSDJ,@LS_YHXS,@LS_XGQZH,@LS_XGQDJ,@LS_SF,@LS_SFZL,@LS_ZLH,@LS_SYH,@LS_SFRY,@LS_SFRQ
IF @@ERROR <> 0
SET @ERR=@ERR+1
END
ELSE ----人工收费模式
BEGIN
----写台帐表
UPDATE SYTZ SET GCZH=@LS_GCZH,YSDJ=@LS_YSDJ,YHDJ=@LS_YHDJ WHERE LTRIM(RTRIM(ZLH))=@LS_ZLH AND SYH=@LS_SYH
END
IF @ERR>0
BEGIN
ROLLBACK TRAN
END
COMMIT TRAN
GO
回复
-狙击手- 2006-03-07
或是把你的SQL语句贴上来看看
回复
msjqd 2006-03-07
在你的事务里面显示的调用 commit 和错误处理 rollback
回复
-狙击手- 2006-03-07
要是不出错的情况下,begin trans 与commit trans 成对出现就行
一旦有有错出现 时,你的SQL语句就要小心了,因为你一rollback 会造成 计数 不匹配
SELECT '事务处理前', @@TRANCOUNT --值为 0

BEGIN TRAN

SELECT '第一个事务', @@TRANCOUNT --值为 1

SELECT * FROM table1

BEGIN TRAN

SELECT '第二个事务', @@TRANCOUNT --值为 2

DELETE table1

COMMIT TRAN

SELECT '递交第二个事务', @@TRANCOUNT --值为 1

ROLLBACK TRAN

SELECT '回滚第一个事务', @@TRANCOUNT --值为 0
回复
lindanwu 2006-03-07
我这个出错的提示是如何产生的呢?为什么说是缺少了COMMIT或ROLLBACK TRANSACTION
回复
-狙击手- 2006-03-07
3、如何避免这种错误。
--
显式的控制事务,或引入事务保存点的概念,具体请看帮助
回复
-狙击手- 2006-03-07
1、计数是如何产生的。
--
计算是SQLSERVER自己产生的,一个显式或的隐式的begin trans 计数器就会加 1
回复
-狙击手- 2006-03-07
1、计数是如何产生的。
--
计算是SQLSERVER自己产生的

2、产生的计数在什么情况下可以清为0
--
rollback 不管当前的计算器是多少,直接清0
commit 把当前的计算器减1

3、如何避免这种错误。
--
显式的控制事务,

回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2006-03-07 10:21
社区公告
暂无公告