[英]How to return multiple varchar from a stored procedure where condition is met
[英]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.