使用相同CTE的两次更新

Thi*_*zig 6 sql-server

我必须在树枝中"删除"文件夹(已将标记为已删除,我更改了标记的值).每个文件夹都可以包含文件或文件夹(存储在不同的表中).我有一个CTE,它定义了所有需要更新的文件夹.

 WITH arbre(id) AS(
     SELECT idDossier
     FROM portail_managers_dossier
     WHERE idDossier = @id
     UNION ALL
     SELECT d.idDossier
     FROM portail_managers_dossier AS d
     INNER JOIN arbre AS a
     ON a.id = d.idParent)
Run Code Online (Sandbox Code Playgroud)

然后我有两个UPDATE请求,每个表一个

 UPDATE portail_managers_dossier
 SET dtDateSuppr = NULL
 WHERE idDossier IN (SELECT id FROM arbre);


 UPDATE portail_managers_document
 SET dtDateSuppr = NULL
 WHERE idDossier IN (SELECT id FROM arbre);
Run Code Online (Sandbox Code Playgroud)

我的问题是:我不知道如何在不同的表上合并两个UPDATE请求.CTE仅存在于请求结束之前,因此我必须将其定义两次.有没有办法在单个请求中编写上述所有代码?

Ran*_*der 11

正如您所发现的,CTE将在第一次更新后失去范围.但是,为什么不将CTE中的查询结果写入临时表,而不是使用CTE,并根据内容临时表进行更新?