SqlServer里,如何一条sql进行递归删除?

游北亮 游北亮 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我知道可以递归检索,如:
CREATE TABLE [aaa](
[id] [int] NULL,
[pid] [int] NULL,
[name] [nchar](10)
)
GO
INSERT INTO aaa VALUES(1,0,a)
INSERT INTO aaa VALUES(2,0,b)
INSERT INTO aaa VALUES(3,1,c)
INSERT INTO aaa VALUES(4,1,d)
INSERT INTO aaa VALUES(5,2,e)
INSERT INTO aaa VALUES(6,3,f)
INSERT INTO aaa VALUES(7,3,g)
INSERT INTO aaa VALUES(8,4,h)
GO

下面的Sql是查询出1结点的所有子结点
with my1 as(select * from aaa where id = 1
union all select aaa.* from my1, aaa where my1.id = aaa.pid
)
select * from my1



我现在想删除1结点和所有子结点,不想用存储过程
但是发现一条sql实现不了:
with my1 as(select * from aaa where id = 1
union all select aaa.* from my1, aaa where my1.id = aaa.pid
)
delete from my1
错误:派生表 'my1' 不可更新,因为其定义中包含 UNION 运算符。


delete from aaa where id in(
with my1 as(select * from aaa where id = 1
union all select aaa.* from my1, aaa where my1.id = aaa.pid
)
select * from my1
)
这个错误更多:
消息 156,级别 15,状态 1,第 2 行
关键字 'with' 附近有语法错误。
消息 319,级别 15,状态 1,第 2 行
关键字 'with' 附近有语法错误。如果此语句是公用表表达式或 xmlnamespaces 子句,那么前一个语句必须以分号结尾。
消息 102,级别 15,状态 1,第 6 行
')' 附近有语法错误。
...全文

相关推荐

评论 8
收藏 已收藏
分享
返回顶部
游北亮
游北亮 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
疑难问题 22,298 成员 121,727 内容