如果没有错误发生,任何人都可以准确指出 MSDN 所说的每个用户存储过程默认返回 0 的位置吗?换句话说,我能否确定下面给出的示例代码是存储过程
IF someStatement
BEGIN
RETURN 1
END
如果 someStatement 为 false 且未发生错误,则应始终返回零?
我知道它实际上是这样工作的,但我没有从微软那里找到任何明确的声明。
如果没有错误发生,任何人都可以准确指出 MSDN 所说的每个用户存储过程默认返回 0 的位置吗?换句话说,我能否确定下面给出的示例代码是存储过程
IF someStatement
BEGIN
RETURN 1
END
如果 someStatement 为 false 且未发生错误,则应始终返回零?
我知道它实际上是这样工作的,但我没有从微软那里找到任何明确的声明。
在 SQL Server 2000 之前,返回值似乎曾经意味着某些东西(参见 SQL 2000 之前的 BOL返回值文章的参考)。我四处查看是否可以找到这些原始返回代码的列表,专门用于MS SQL,并找到以下内容(虽然我不知道它的真实性,它实际上并没有列出值)。
因此,在阅读了所有这些文章之后,看起来@return_status 是一个在执行存储过程时总是返回的参数(即使您不使用它)。根据RETURN Books 在线文章,返回代码不能为空。
与存储过程一起使用时,RETURN 不能返回空值。如果一个过程试图返回一个空值(例如,当@status 为NULL 时使用RETURN @status),则会生成一条警告消息并返回一个值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 不能为null(未设置时为0,或设置为NULL)......
至于假设的 SQL 7.0 的 BOL文章中提到的错误代码 ,我的猜测是 Sybase 的旧保留... Sybase 5.0 Manual
克里斯
编辑:
链接说
与存储过程一起使用时,RETURN 不能返回空值。如果一个过程试图返回一个空值(例如,当@status 为NULL 时使用RETURN @status),则会生成一条警告消息并返回一个值0。
可以说没有 RETURN = RETURN NULL = RETURN 0。但没有发出警告,因为您还没有运行RETURN NULL
。预计为零,因为它是一个存储过程。
此外,存储过程执行允许
EXEC @rtn = uspMyProc @p1...
所以必须返回一些东西,因为我们总是期望一个值,而不是 NULL
即使 MSDN 没有说,我也依赖零返回 12 年。以及我们中的许多人:-)
如果您要在客户端中切换一些逻辑,为什么不返回“0”并使其更明确?
使用联机丛书中的返回代码返回数据。