-1
我有以下存儲過程,每次應用程序做一些刪除操作時,我都必須執行這些存儲過程。我的問題是,如果你們中的任何一個人知道某種方式,加快這個存儲過程。加速sql存儲過程
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)在表中找不到。之後,第二個刪除語句將被執行。這次相同的語句找不到之前執行的元素的任何ElementIds。
重要提示: 在執行存儲過程之前,應用程序已刪除一個元素。之後,整個結構將被保存。之後,所有父母不存在的元素將被存儲過程刪除。
該環境是一個SQL Server 2008 R2。 提前謝謝!
安德烈
我不明白的第二個delete語句是什麼。當然這是多餘的,因爲第一次刪除將刪除所有必要的「元素」? – 2013-04-10 07:58:21
它看起來並不像第二次刪除與已經指出的不同。 – Ric 2013-04-10 08:01:15
這是一個樹形結構。如果您刪除了具有兒童的元素,則也必須刪除兒童。 – Andre 2013-04-10 08:01:23