删除行以及同一表中的所有外部引用的存储过程

时间:2013-12-03 20:21:10

标签: sql sql-server stored-procedures tree

我的表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被设置为零。我需要为它编写一个存储过程。它类似于树删除但是它的存储过程是什么?

1 个答案:

答案 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 演示