职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 670|回复: 0

sqlserver2005在事务中使用CTE

[复制链接]
jinchang 发表于 2009-8-16 10:55 | 显示全部楼层 |阅读模式
删除后台撮合线程控制树下的某个节点以及它的子节点
并更新这个节点的父节点的子节点数目
运行后提示找不到ACTE
如果没开启事务
可以正常运行
为什么会这样?我想在同一个事务中完成这两个功能该怎么办?
create PROCEDURE [dbo].[SP_BG_TD_PRCTHREADTREENODE]
@nodenoint ,--目标子节点编号
@parentnoint --目标子节点的父亲节点编号
AS
BEGIN

set NOCOUNT ON
BEGIN TRANSACTION

WITH ACTE(NODE_NO)
AS
(
SELECT NODE_NO
FROM TD_HNDL_PROCTHRAEDTREE WHERE NODE_NO=@nodeno
UNION ALL
SELECT TA.NODE_NO
FROM TD_HNDL_PROCTHRAEDTREE TA INNER JOIN ACTE TB
ON TA.PARENT_NO=TB.NODE_NO
)
update TD_HNDL_PROCTHRAEDTREEset
TD_HNDL_PROCTHRAEDTREE.IS_VALIDATE=0,
TD_HNDL_PROCTHRAEDTREE.DELTE_TIME=getdate()
where TD_HNDL_PROCTHRAEDTREE.NODE_NO in (select NODE_NO from ACTE);
UPDATE TD_HNDL_PROCTHRAEDTREE SET CHILD_NUM=CHILD_NUM-1 WHERE NODE_NO=@parentno;
IF (@@error <> 0) GOTO UNEXPECTED_ERR_HANDLER--如果发生错误
跳转到标记处
事物回滚
COMMIT TRANSACTION
SET NOCOUNT OFF
RETURN0
UNEXPECTED_ERR_HANDLER:
ROLLBACK TRANSACTION
SET NOCOUNT OFF
RETURN -1

END
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-4-28 04:20 , Processed in 0.112315 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表