none
StoredProcedure If else 疑問 RRS feed

  • 問題

  • 請教各位:

    小弟這裡有個delete的預存程式,裡頭有巢狀if else 驗證資料是否能刪除, 判斷之後再執行動作並將訊息丟到前端。

    只是執行出來的順序有點奇怪,經過不斷爬文還是不解,請各位麻煩指點一下~

    CREATE procedure ProductionDelete /**這裡是參數***/ (

    @ProdID int, @Category NVARCHAR (10), @Amount INT, /***要刪除的數量***/ @ReturnMSG nvarchar(50) output, @ReturnBG int output ) /***宣告變數***/ as declare @TotalChildAll as int declare @TotalHatch as int set @TotalHatch = (SELECT COALESCE(SUM(Amount),0) AS TotalHatch FROM Production where(Category = '孵化紀錄') set @TotalChildAll =(SELECT COALESCE(SUM(Amount),0) AS TotalChild FROM Production where(Category LIKE '子代')) /****程式執行驗證***/ if (@Category = N'孵化紀錄') begin if(@TotalHatch - @Amount < @TotalChildAll) begin set @ReturnMSG = N'錯誤!刪除的資料導致孵化數比子代少' <----條件是else的狀況卻執行delete後顯示這裡的output set @ReturnBG = 0 end else begin /**DELETE FROM GroupProduction where ProdID = @ProdID**/<---原本是沒有註解掉,註解掉output才會正常,但是不能delete set @ReturnMSG = N'刪除資料完成!' set @ReturnBG = 1 end end else begin DELETE FROM GroupProduction where ProdID = @ProdID set @ReturnMSG = N'刪除資料完成!' set @ReturnBG = 1 end

    執行時入如果遇到這樣的狀況(@TotalHatch - @Amount > @TotalChildAll)

    正常應該要執行以下

    DELETE FROM GroupProduction where ProdID = @ProdID set @ReturnMSG = N'刪除資料完成!' set @ReturnBG = 1

    結果卻發生只做了Delete然後傳回

    set @ReturnMSG = N'錯誤!刪除的資料導致孵化數比子代少'
    set @ReturnBG = 0

    如果把delete指令註解的話,才會正常顯示判斷的output,但是....資料就不能刪除了

    小弟甚至嘗試將條件逆著寫回來,結果也是一樣。

    再煩請各位指點一下錯誤的地方




    • 已編輯 13a13oon 2013年8月4日 下午 03:53
    2013年8月4日 下午 03:48

解答