求救,存储过程顺利执行,但是里面的update未生效
CREATE PROCEDURE ECS_MIS_PREPARE_REQ(@batchId INTEGER,@retcode VARCHAR(6) OUTPUT)
AS
BEGIN
DECLARE @nowDate VARCHAR(8)
SET @nowDate = convert(varchar(8),getDate(),112)
IF NOT EXISTS(SELECT * FROM ECS_MIS_BATCHFLAG WHERE BATCH_CONTENT = 'CUSTCOM ' AND batch_date = @nowDate)
BEGIN
BEGIN TRANSACTION
INSERT INTO ECS_MIS_BATCHFLAG(batch_content, batch_date,batch_flag, batch_remark)VALUES( 'CUSTCOM ',@nowDate,NULL,NULL)
COMMIT TRANSACTION
END
BEGIN TRANSACTION
DELETE FROM ECS_MIS_CUSTCOM_REQ
COMMIT TRANSACTION
BEGIN TRANSACTION
INSERT INTO ECS_MIS_CUSTCOM_REQ (seq_no, cust_name, cert_no, birthday) SELECT taskId, customerName, credentialCode, birthday FROM TsmTask WHERE batchId = @batchId
COMMIT TRANSACTION
BEGIN TRANSACTION
UPDATE ECS_MIS_BATCHFLAG SET batch_flag= '0 ' WHERE batch_content= 'CUSTCOMM ' AND batch_date=@nowDate
COMMIT TRANSACTION
IF @@ERROR <> 0
-- 返回错误代码
SET @retcode = '005002 '
ELSE
-- 返回成功代码
SET @retcode = '005000 '
END
--------------------------
执行完毕后,数据插入了表,但是batch_flag却还是为null,我在存储过程里写了更新为0的啊
为什么不生效呢?
------解决方案--------------------把你的表结构和一部分数据写出来,你的存储过程存在很大的问题,这样写事务没有什么作用。
------解决方案--------------------哈哈,第一次见人这样写事务,太经典了
这样的事务写和不写唯一的区别就是,写了占系统资源。
=====================================================
正确写法:
declare @error int
set @error = 0
BEGIN TRANSACTION
UPDATE ECS_MIS_BATCHFLAG SET batch_flag= '0 ' WHERE batch_content= 'CUSTCOMM ' AND batch_date=@nowDate
set @error = @@error
if @@error = 0
begin
COMMIT TRANSACTION
else
rollback transaction
--select ... 返回错误信息
return
end
------解决方案--------------------lz怎么写了这么多的事务啊!是故意要让他们分开执行的么?而且怎么只有提交没有回滚啊!最好说出你要实现的功能。