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
Column_Order -1,保持顯示順序連續。此預存程序配合前篇的新增、後續的讀取,構成完整無限級分類的資料層操作集合。