递归表的删除,存储过程递归

本文介绍了一种在 SqlServer2005 中使用递归存储过程实现递归表删除的方法,解决了直接删除时违反约束的问题,并给出了具体实现的 SQL 语句及存储过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在网上看到很多人对于递归表的删除是使用关系进行的,但是我在SqlServer2005 死活说我违反约束,郁闷啊,于是想到使用递归来做。一下是一张递归表

CREATE TABLE [dbo].[Tiku](
    
[TikuID] [int] IDENTITY(1,1NOT NULL,
    
[TikuName] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
    
[TikuParentID] [int] NOT NULL,
 
CONSTRAINT [PK_Tiku] PRIMARY KEY CLUSTERED 
(
    
[TikuID] ASC
)
WITH (IGNORE_DUP_KEY = OFFON [PRIMARY]
ON [PRIMARY]

 好了,以下是我的存储过程

CREATE PROCEDURE [dbo].[DeleteTiku]
    @TikuID 
int
AS
BEGIN
    declare @TikuParentID 
int;
    
set @TikuParentID = -1;

    select @TikuParentID
=TikuID from dbo.Tiku where TikuParentID=@TikuID;
    
    
if ( @TikuParentID <> -1 )
        exec DeleteTiku @TikuParentID;
    delete from dbo.Tiku 
where TikuParentID=@TikuID;
END

执行就可以了。

在调整存储过程时候,发现好像递归的深度也是有限的——32。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值