1、计数是如何产生的。
--
计算是SQLSERVER自己产生的2、产生的计数在什么情况下可以清为0
--
rollback 不管当前的计算器是多少,直接清0
commit 把当前的计算器减13、如何避免这种错误。
--
显式的控制事务,
--
计算是SQLSERVER自己产生的2、产生的计数在什么情况下可以清为0
--
rollback 不管当前的计算器是多少,直接清0
commit 把当前的计算器减13、如何避免这种错误。
--
显式的控制事务,
--
计算是SQLSERVER自己产生的,一个显式或的隐式的begin trans 计数器就会加 1
一旦有有错出现 时,你的SQL语句就要小心了,因为你一rollback 会造成 计数 不匹配
SELECT '事务处理前', @@TRANCOUNT --值为 0BEGIN TRAN SELECT '第一个事务', @@TRANCOUNT --值为 1 SELECT * FROM table1 BEGIN TRAN SELECT '第二个事务', @@TRANCOUNT --值为 2 DELETE table1 COMMIT TRAN SELECT '递交第二个事务', @@TRANCOUNT --值为 1ROLLBACK TRANSELECT '回滚第一个事务', @@TRANCOUNT --值为 0
@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