代码之家  ›  专栏  ›  技术社区  ›  Joh

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

sql
  •  35
  • Joh  · 技术社区  · 15 年前

    什么时候使用输出参数和返回变量,或者相反?在下面的简单示例中,我可以使用其中任何一个实现相同的功能。

    使用输出参数

    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 
    

    create proc dbo.TestReturn (@InValue int)
    as
    return @InValue
    
    declare @x int
    exec @x = TestReturn @InValue = 3
    select @x 
    

    正如你所看到的,他们都做同样的事情。有人能给我举个例子,说明选择输出参数和返回变量会有什么不同吗?

    7 回复  |  直到 15 年前
        1
  •  18
  •   Kevin LaBranche    14 年前

    我更喜欢:

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

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

        2
  •  13
  •   Remus Rusanu    15 年前

    这是T-SQL,不是C。永远不要使用返回值,许多客户端API使处理返回值成为一种痛苦,如果不是完全不可能的话。始终使用输出参数。

        3
  •  10
  •   Mark Brackett    15 年前

    因为返回值只适用于 int ,结果是“不一致”。为了保持一致性,我更喜欢输出参数。

        4
  •  10
  •   Jeff Wight    15 年前

    您应该使用RETURN从过程中返回值,与使用EXIT在批处理脚本中返回值的方式大致相同。Return实际上并不是用于传递参数,而是一种退出过程或查询的方法。根据 MSDN documentation :

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

        5
  •  1
  •   mannu2050    14 年前

    我会以不同的方式回答这个问题:

    第二种情况:在C#中,如果使用输出参数,则可以控制类型。

    第三种方案:功能与程序选择一种适合您需要的方案。

    希望这有帮助

        6
  •  1
  •   jgritten    9 年前

    取自 here

    • 当您想要返回一个或多个数据类型的项时,最好使用输出参数。
    • 通常,对需要返回的任何内容使用输出参数。
    • 通常,返回值仅用于通知存储过程的成功或失败。
    • 返回列表项的值为0表示成功,任何非零值表示失败。
        7
  •  0
  •   user3423986    10 年前

    我对许多事情使用返回值,因为它更具表现力,例如:

    1-当我在数据库中执行验证时插入或更改项目时,返回正数以返回标识,返回负数以返回错误,速度更快。

    对于其余部分,当有多个返回或不同类型的int时,我使用Output。当然,我使用recorset返回一个项目列表