2010-02-25 69 views
7

我們可以從存儲過程返回空值嗎?我不想使用collase或isnull。我想在前端捕獲NULL。可能嗎 ?我們是否可以從存儲過程返回空值

編輯:

我使用Sql Server 2005

如。在這裏我想用

CREATE PROCEDURE [Authentication].[spOnlineTest_CheckLogin] 

    @UserName NVARCHAR(50) 
AS 
BEGIN TRY 
    BEGIN TRAN 
        COMMIT TRAN 
    RETURN NULL 
     END TRY 

錯誤 的「spOnlineTest_CheckLogin」過程試圖返回NULL的狀態,這是不允許的。狀態0將被返回。 消息0,級別11,狀態0,行0 當前命令發生嚴重錯誤。如果有的話,結果應該被丟棄。

+0

你正在使用什麼數據庫? SQL Server,MySQL等? – 2010-02-25 17:00:16

+0

@Justin:Q標記爲T-SQL。這是SQL Server。 – 2010-02-25 17:15:57

+1

@Mehrdad Afshari,Sybase也使用T-SQL – 2010-02-25 17:36:22

回答

7

不,存儲過程的返回類型是INT,它不能爲空。

+0

存儲過程的輸入參數可以是INT,仍然可以分配NULL,那麼爲什麼不使用RETURN參數呢? – 2014-10-28 14:28:27

+0

@Chris:這就是語言的設計。我懷疑它的預期用例是失敗/成功的狀態,而不是空白是有道理的。 – 2014-10-28 18:37:17

3

使用的輸出參數,例如

CREATE PROCEDURE Test 
    @UserName NVARCHAR(50), @Status int output 
AS 
BEGIN TRY 
    BEGIN TRAN 
        COMMIT TRAN 
    set @Status = null 
     END TRY 
     begin catch 
     end catch 
     go 

然後調用它像這樣

declare @s int 
    set @s =5 
    exec Test'bla',@s output 
    select @s --will be null 
0

你可以把一個進程像如下。讓我先設置上下文。我們可能有一個表Table1(id int, name varchar(2), Address varchar(2))並且想要得到該id,如果沒有找到,它將爲空。所以我們可能寫出如下的proc:

CREATE PROCEDURE GetId 
    @Name VARCHAR(50), @Status int output 
AS 
BEGIN TRY 
    set @Status = null 
    select @Status = id from Table1 where [email protected] 

這將適用於你。