2010-02-25 57 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] 

这将适用于你。