存储过程,何时使用输出参数vs返回变量

35 sql

您何时使用输出参数vs返回变量,反之亦然?在下面的简单示例中,我可以使用任何一个实现相同的功能.

使用输出参数

create proc dbo.TestOutput (@InValue int, @OutValue int output)
as
set @OutValue = @InValue

declare @x int
exec TestOutput @InValue = 3, @OutValue = @x output
select @x 
Run Code Online (Sandbox Code Playgroud)

使用返回变量:

create proc dbo.TestReturn (@InValue int)
as
return @InValue

declare @x int
exec @x = TestReturn @InValue = 3
select @x 
Run Code Online (Sandbox Code Playgroud)

如你所见,他们都做同样的事情.有人能告诉我一个例子,输出参数与返回变量的选择会有所不同吗?

Kev*_*che 17

我更喜欢:

当您只需要返回一个项目时使用返回值.

需要返回多个值时使用输出参数.

另一种常见的使用模式,虽然不是我的首选,但是仅使用返回值来通知成功或失败以及需要返回的任何内容的输出参数.

  • 只需列出两个主要思路即可。:-) (2认同)

Rem*_*anu 12

这是T-SQL,而不是C.永远不要使用返回值,许多客户端API使得处理返回值变得很痛苦,如果不是不可能的话.始终使用OUTPUT参数.

  • 我会说BEGIN TRY/BEGIN CATCH和RAISERROR比返回值更有用. (4认同)

Jef*_*ght 9

您应该使用RETURN从过程中返回一个值,就像使用EXIT返回批处理脚本中的值一样.返回不是真正用于参数传递,而是作为退出过程或查询的方法.根据MSDN文档:

除非另有说明,否则所有系统存储过程都返回值0.这表示成功,非零值表示失败.

一旦您认识到缺乏为返回值定义类型的能力,这一点就会变得更加明显.它必须是INT.


Mar*_*ett 8

由于返回值仅适用int,因此最终会出现"不一致".我更喜欢输出参数的一致性.

此外,输出参数强制调用者识别返回的值.IME,返回值通常被忽略.