日期:2014-05-17  浏览次数:20417 次

数据库中一条删除语句的问题
用数据库保存一棵树的信息
如何运用存储过程删除节点下的所有子节点
表结构只有最基本的
id  父id

------解决方案--------------------
USE test
GO


-->生成表tb

if object_id('tb') is not null 
drop table tb
Go
Create table tb([id] smallint,[parentid] nvarchar(1))
Insert into tb
Select 1,N'0'
Union all Select 2,N'1'
Union all Select 3,N'1'
Union all Select 4,N'2'
Union all Select 5,N'2'
Union all Select 6,N'3'


SELECT * FROM tb
/*
id     parentid
------ --------
1      0
2      1
3      1
4      2
5      2
6      3
*/

;WITH t AS (
SELECT * FROM tb
WHERE id=2
UNION ALL
SELECT a.* FROM tb AS a
INNER JOIN t ON a.parentid=t.id
)DELETE a FROM t INNER JOIN tb AS a ON t.id=a.id

/*
id     parentid
------ --------
2    1
4    2
5    2
*/

SELECT * FROM tb

/*
id     parentid
------ --------
1      0
3      1
6      3

*/

------解决方案--------------------
引用:
只有一张表 
我已经想出来了 谢谢
SQL code?1234567891011121314Create PROCEDURE [dbo].[proc_delnodes]  @id int   /*推荐将默认参数放在最后*/   AS declare  @chicou intset @chicou=1 declare  @delid varchar(5000)    s……


一條一條的刪除的話,最好用事務控制。