首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

存儲過程實現無限級分類(二)

     編輯:關於ASP.NET

刪除節點的預存程序:事務保護與順序重排

CREATE PROCEDURE sp_Column_Delete
(
    @Column_ID int
)
AS
DECLARE @Err AS int
SET @Err = 0
BEGIN TRAN

-- 1. 檢查是否有子節點
SELECT Column_ID FROM Tb_Column WHERE Parent_ID = @Column_ID
IF @@RowCount <> 0
BEGIN
    SET @Err = 1
    GOTO theEnd
END

-- 2. 取得被刪節點的 Column_Order
DECLARE @Column_Order AS int
SELECT @Column_Order = Column_Order FROM Tb_Column WHERE Column_ID = @Column_ID
IF @Column_Order IS NULL
BEGIN
    SET @Err = 2
    GOTO theEnd
END

-- 3. 更新後續節點順序 -1
UPDATE Tb_Column SET Column_Order = Column_Order - 1 WHERE Column_Order > @Column_Order
IF @@ERROR <> 0
BEGIN
    SET @Err = 3
    GOTO theEnd
END

-- 4. 執行刪除
DELETE FROM Tb_Column WHERE Column_ID = @Column_ID
IF @@ERROR <> 0
BEGIN
    SET @Err = 4
    GOTO theEnd
END

-- 5. (選擇性) 重新編號 Column_ID,此處註解保留
-- UPDATE Tb_Column SET Column_ID = Column_ID - 1 WHERE Column_ID > @Column_ID

theEnd:
IF @Err = 0
BEGIN
    COMMIT TRAN
    RETURN 0  -- 刪除成功
END
ELSE
BEGIN
    IF @Err = 1
    BEGIN
        ROLLBACK TRAN
        RETURN 1  -- 有子節點,禁止刪除
    END
    ELSE
    BEGIN
        ROLLBACK TRAN
        RETURN 2  -- 未知錯誤
    END
END
GO

設計重點

  • 事務包裹: 確保檢查、順序更新、刪除原子性。
  • 錯誤碼語意化: 0=成功、1=有子節點、2=其他錯誤,呼叫端易判斷。
  • 順序維護: 刪除後將後續節點 Column_Order -1,保持顯示順序連續。
  • 遞迴刪除未實作: 若需連同子樹刪除,需先遞迴取得所有後代 ID 再批次刪除,或使用遞迴 CTE(SQL 2005+)。

此預存程序配合前篇的新增、後續的讀取,構成完整無限級分類的資料層操作集合。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved