有没有人能够准确指出MSDN在哪里说,如果没有错误发生,每个用户存储过程默认返回0?换句话说,当下面的示例代码作为存储过程时,我能确定吗?
IF someStatement
BEGIN
RETURN 1
END
如果 someStatement 为 false 并且没有出现错误,应该始终返回零吗?
我知道它实际上是这样工作的,但我找不到Microsoft对此的任何明确说明。
有没有人能够准确指出MSDN在哪里说,如果没有错误发生,每个用户存储过程默认返回0?换句话说,当下面的示例代码作为存储过程时,我能确定吗?
IF someStatement
BEGIN
RETURN 1
END
如果 someStatement 为 false 并且没有出现错误,应该始终返回零吗?
我知道它实际上是这样工作的,但我找不到Microsoft对此的任何明确说明。
运行以下 T-SQL,可以明确显示这一点,当与存储过程一起使用时,RETURN 不能返回 null 值。如果存储过程尝试返回 null 值(例如,使用 RETURN @status,当 @status 为 NULL 时),则会生成警告消息并返回值 0。
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不能返回空值。 如果存储过程尝试返回null值(例如,使用RETURN @status when @status is NULL),则会生成警告消息并返回0的值。
可以说没有 RETURN = RETURN NULL = RETURN 0。但是如果您没有运行RETURN NULL
,则不会发出警告。 它期望返回0,因为它是一个存储过程。
此外,存储过程执行允许
EXEC @rtn = uspMyProc @p1...
因为我们总是期望一个值而不是NULL,所以必须返回某些内容。
我已经依赖于返回0了12年了,即使MSDN上没有提到。还有更多像我这样的人:-)
如果你要在客户端上切换一些逻辑,为什么不返回“0”并使其更明确呢?
从Books Online中查看使用返回代码返回数据。