簡體   English   中英

如果不滿足條件,如何使存儲過程失敗

[英]How to make stored procedure fail if condition is not met

如果不滿足條件,我需要我的存儲過程失敗。 換句話說,我想驗證一些東西,如果它沒有被驗證,這個過程應該在那里結束並且失敗。

目前,如果不滿足條件,該過程不會失敗。 它只是沒有 go 到下一步,但我希望它失敗,所以我得到通知。

這很簡單,但我沒那么聰明。 這是我寫的:

declare @IncompleteRows int                                            
set @IncompleteRows = (select Count(*) from DimTable where Incomplete = 1)

if @IncompleteRows = 0

begin                                                                            
update DimTable2                                                               
set Column1 = 'X'                                                          
end 

因此,如果@IncompleteRows = 0,則 Table2 會根據需要進行更新。
但如果@IncompleteRows 不為0,則什么也不會發生,存儲過程在技術上是成功的。

我希望存儲過程失敗。 我怎樣才能做到這一點? 謝謝!

如前所述,您可以隨時在代碼中拋出錯誤。 您可以使用 RAISERROR 或 THROW(我相信它是在 2012 年實施的)。 您也不需要變量或計數。

IF NOT EXISTS(select * from DimTable where Incomplete = 1)
BEGIN                                                                            
    UPDATE DimTable2
    SET Column1 = 'X';
END 
ELSE
    RAISERROR('There are no rows in DimTable where Incomplete equals 1', --Message
            16, --Severity
            1); --State

或者

IF NOT EXISTS(select * from DimTable where Incomplete = 1)
BEGIN                                                                            
    UPDATE DimTable2
    SET Column1 = 'X';
END 
ELSE
    THROW 52000, --Error number must be between 50000 and  2147483647.
        'There are no rows in DimTable where Incomplete equals 1', --Message
        1; --State

您還可以使用 RETURN 結束該過程而不會出現錯誤。 如果您返回一個不同於 0 的值,您可以將其用作應用程序代碼中某些錯誤的指示符。

IF NOT EXISTS(select * from DimTable where Incomplete = 1)
BEGIN                                                                            
    UPDATE DimTable2
    SET Column1 = 'X';
END 
ELSE
    RETURN 10;

我想答案是RAISERROR

https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008/ms178592(v=sql.100)

像這樣的東西:

if @IncompleteRows = 0
  update DimTable2
     set Column1 = 'X';
else
  RAISERROR('I expected the query to return 0 records', 1, 1);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM