【问题标题】:can we return a null from stored procedure我们可以从存储过程中返回一个空值吗
【发布时间】:2011-01-21 02:37:12
【问题描述】:

我们可以从存储过程中返回空值吗?我不想使用 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 当前命令发生严重错误。结果,如果有的话,应该丢弃。

【问题讨论】:

  • 您使用的是什么数据库? SQL Server、MySQL 等?
  • @Justin:Q 被标记为 T-SQL。它是 SQL Server。
  • @Mehrdad Afshari,Sybase 也使用 T-SQL

标签: sql-server database sql-server-2005 tsql stored-procedures


【解决方案1】:

你可以想像下面这样的过程。让我先设置上下文。我们可能有一个表 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 name=@name

这对你有用。

【讨论】:

    【解决方案2】:

    使用输出参数,示例

    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
    

    【讨论】:

      【解决方案3】:

      不,存储过程的返回类型是INT,不能为null。

      【讨论】:

      • 存储过程的输入参数可以是 INT 并且仍然被分配为 NULL 那么为什么不返回参数呢?
      • @Chris:这就是语言的设计方式。我怀疑它的预期用例是失败/成功状态,不为空是有意义的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多