存儲過程中RETURN語句的返回值


看到RETURN的返回值不同,代表意義各不同,能過查找,得出以下結論:

RETURN語句會導致過程立即退出。考察下面的例子:

CREATE PROCEDURE check_tables

(@who VARCHAR(30))

AS

IF EXISTS(SELECT name FROM Philosophers WHERE name=@who)

BEGIN

PRINT In the Philosophers Table

RETURN

END

IF EXISTS(SELECT author_name FROM Authors WHERE author_name=@who)

BEGIN

PRINT In the Authors Table

RETURN

END

PRINT Not in any tables!

RETURN

該過程檢查了兩個表以判斷一個人是否是哲學家或作者。假如提供的名稱即不是哲學家也不是作者,打印文本“Not in any tables!。RETURN語句會在一旦存在匹配時,立刻退出該過程。

比如,假定你使用參數“Plato來執行該過程。首先使用表Philosophers來檢測是否存在“Plato。由於該名字存在於該表中,所以過程打印文本In the Philosophers table,然后過程在執行到RETURN語句時,退出。

 

 

注意

你可以使用RETURN語句結束任何過程。這實際上並不完成任何事情。因為在任何情況下,過程總是要退出的。

當你在存儲過程而不是在批處理中使用RETURN語句時,你能夠返回一整數值。該整數值代表一個狀態碼。下面就是上面的例子經過改寫后,返回特定的整數值。

CREATE PROCEDURE check_tables

(@who VARCHAR(30))

AS

IF EXISTS(SELECT name FROM Philosophers WHERE name=@who)

BEGIN

RETURN(1)

END

IF EXISTS(SELECT author_name FROM Authors WHERE author_name=@who)

BEGIN

RETURN(2)

END

RETURN(3)

該過程完成和前面的那個過程相同的任務。然而當在表中發現該姓名時,並不打印信息,代替地,該過程使用RETURN語句來指明從那個表中找到該名稱。例如,假如你使用參數“James Joyce”來執行該過程時。存儲過程會返回值2,因為James Joyce在表Authors中,而不是在表Philosophers中。你可以在Active Server Page或其他的存儲過程中使用狀態值來確定該姓名所在的表。

當使用狀態值時,你必須使用對於1或小於-99的值。SQL Server使用值0來報告一個存儲過程的成功執行。它同時使用小於0對於-100的值來報告錯誤(參看表12。1以獲得SQL Server使用的狀態值的完全列表)。

 

意思

0

過程成功執行。

-1

對象丟失。

-2

發生數據類型錯誤。

-3

處理過程被死鎖。

-4

發生權限錯誤。

-5

發生語法錯誤。

-6

發生惡意用戶錯誤。

-7

發生資源錯誤,比如空間不夠等。

-8

遭遇非致命的內部問題。

-9

遭遇系統限制。

-10

發生致命的內部不穩定性。

-11

發生致命的內部不穩定性。

-12

表或索引被破壞。

-13

數據庫被破壞。

-14

發生硬盤錯誤。

包含在-15到-99之間的值有SQL Server保留以在將來使用。

 

表12.1 過程狀態值

注意

當你使用RETURN語句返回狀態值時,切記不要返回NULL值。這會導致錯誤的結果。

為了獲得在前面例子中過程返回的狀態值,你可以使用如下的語句:

DECLARE @conclusion INT

EXECUTE @conclusion=check_tables James Joyce

SELECT @conclusion

變量@conclusion用於保存狀態值。它必須定義成INT整數數據類型。當你執行存儲過程check_tables時,使用下面的語句將狀態值賦予該變量:

EXECUTE @conclusion=check_tables James Joyce


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM