如果没有错误发生,那么任何人都可以准确指出MSDN所说的每个用户存储过程默认返回0吗?换句话说,我可以确定下面给出的示例代码是一个存储过程
IF someStatement
BEGIN
RETURN 1
END
如果someStatement为false并且没有错误发生,应该总是返回零?
我知道它实际上是这样工作的,但是我没有从微软那里找到任何明确的声明。
答案 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不能返回空值。如果 过程尝试返回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)