每次应用程序执行某些删除操作时,我都必须执行以下存储过程。我的问题是,如果你们中的任何人知道某种方式,来加速这个存储过程。
DECLARE @CID UNIQUEIDENTIFIER
SET @CID = @CategoryId
DELETE FROM Elements
WHERE CategoryId = @CID
AND ParentId IS NOT NULL
AND ParentId NOT IN (SELECT ElementId FROM Elements WHERE CategoryId = @CID)
WHILE (@@ROWCOUNT > 0)
BEGIN
DELETE FROM Elements
WHERE CategoryId = @CID
AND ParentId IS NOT NULL
AND ParentId NOT IN (SELECT ElementId FROM Elements WHERE CategoryId = @CID)
END
这里的结构:
Element 1
Element 2
Element 2.1
Element 2.2
Element 2.3
Element 2.3.1
Element 2.3.2
Element 3
...
例如,如果“元素 2”被删除,则所有子元素也必须被删除。
查询如何工作: 如果我删除“元素 2”并执行存储过程,第一个删除语句将删除“元素 2.1”、“元素 2.2”和“元素 2.3”,因为它的 ParentId(“元素 2”的 ElementId ) 在表中找不到。之后将执行第二个删除语句。这次同样的语句找不到之前执行删除的Elements的任何ElementIds。
重要提示: 在执行存储过程之前,应用程序已经删除了一个元素。之后,整个结构将被保存。之后,所有父级不存在的元素将被存储过程删除。
环境是 SQL Server 2008 R2。先感谢您!
安德烈