我的表AB包含A,B和is_active列,其中A是主键,B是A列,例如条目是(1,null,1),(2,1,1),(3,null,1 ),(4,2,1),(5,3,1),(6,5,1)等。因此,如果我删除带有主键1的条目,那么行应该更新为(1,null,0),(2,1,0),(3,null,1),(4,2,0),(5删除所有引用的行时,ie_active被设置为零。我需要为它编写一个存储过程。它类似于树删除但是它的存储过程是什么?
答案 0 :(得分:1)
如果您正在使用SQL Server,那么您的过程可能看起来像
CREATE PROCEDURE recursive_delete(@id INT)
AS
BEGIN
SET NOCOUNT ON;
WITH tree(a, b, is_active) AS
(
SELECT a, b, is_active
FROM table1
WHERE a = @id
UNION ALL
SELECT s.a, s.b, s.is_active
FROM tree t JOIN table1 s
ON t.a = s.b
)
UPDATE s
SET s.is_active = 0
FROM table1 s JOIN tree t
ON s.a = t.a
END
这是 SQLFiddle 演示