MSDN关于存储过程的默认返回值

时间:2010-04-05 13:17:46

标签: sql-server stored-procedures msdn

如果没有错误发生,那么任何人都可以准确指出MSDN所说的每个用户存储过程默认返回0吗?换句话说,我可以确定下面给出的示例代码是一个存储过程

IF someStatement
BEGIN
  RETURN 1
END
如果someStatement为false并且没有错误发生,

应该总是返回零?

我知道它实际上是这样工作的,但是我没有从微软那里找到任何明确的声明。

4 个答案:

答案 0 :(得分:9)

看起来曾几何时,返回值可能意味着某些东西(请参阅SQL 2000之前的SQL 2000 BOL return value article)。 我查看是否可以找到专门针对MS SQL的这些原始返回码的列表,并找到了following(我不知道它的真实性,但实际上并没有列出值)。

因此,在阅读了所有这些文章后,看起来@return_status是一个在执行存储过程时始终返回的参数(即使您不使用它)。根据{{​​3}}图书在线文章,返回代码不能为空。

  

与存储过程一起使用时,   RETURN不能返回空值。如果   过程尝试返回null   值(例如,使用RETURN   当@status为NULL时@status,a   生成警告消息并且   返回值为0.

运行以下T-SQL肯定会显示这个,

create Procedure Test
as
begin
DECLARE @RTN integer
Return @RTN
END
GO

Exec Test
GO

Drop Procedure Test
GO

你会收到

The 'Test' procedure attempted to return a status of NULL, which is not allowed. A status of 0 will be returned instead.

最后看起来答案是因为 @return_status不能为空(未设置时为0,或设置为NULL)...

对于SQL 7.0的假定BOL RETURN中提到的错误代码,我的猜测将是Sybase的一个旧版本... article

克里斯

答案 1 :(得分:7)

RETURN on MSDN

编辑:

链接说

  

与存储过程一起使用时,   RETURN不能返回空值。如果   过程尝试返回null   值(例如,使用RETURN   当@status为NULL时@status,a   生成警告消息并且   返回值为0.

可以说没有RETURN = RETURN NULL = RETURN 0.但是没有发出警告,因为你没有运行RETURN NULL。预计为零,因为它是一个存储过程。

此外,存储过程执行允许

EXEC @rtn = uspMyProc @p1...

所以必须返回,因为我们总是期望一个值,永远不会为NULL

即使MSDN没有说,我仍然依赖零返回12年。和我们中的更多人一样: - )

答案 2 :(得分:0)

如果要在客户端中切换某些逻辑,为什么不返回“0”并使其更明确?

答案 3 :(得分:-1)

来自联机丛书的

Returning Data by Using a Return Code