【问题标题】:Is it possible to ignore an output param of a stored procedure?是否可以忽略存储过程的输出参数?
【发布时间】:2009-01-26 21:30:52
【问题描述】:

如何忽略存储过程的输出参数?我正在从另一个过程调用该过程,例如:

DECLARE @param1 integer

EXEC mystoredprocedure 
    @in_param_1, 
    @in_param2_, 
    @param1 OUTPUT, 
    -- what do I type here to ignore the second output param??

我正在使用 T-SQL (MS SQL 2005)。

【问题讨论】:

    标签: sql sql-server-2005 tsql stored-procedures


    【解决方案1】:

    您可以只使用 NULL 作为最后一个参数,它应该可以正常工作 - 只要该参数也不需要用于 proc 中的输入逻辑。

    在您的情况下,您将 proc 称为

    exec mystoredproc @in_param_1, @in_param2_, @param1 OUTPUT, null
    

    这是针对相同场景的另一个示例...

    create proc MyTempProc
        (@one int,
        @two int out,
        @three int out)
    AS
    begin
    
        set @two = 2
        set @three = 3
    
        select @one as One
    
    end
    go
    
    declare @p1 int,
            @p2 int
    
    set     @p1 = 1
    
    exec MyTempProc @p1, @p2 out, null 
    
    print @p1
    print @p2
    

    【讨论】:

      【解决方案2】:

      输出参数必须有一个默认值才能让您不传递它。见下文

      create proc x (@in int = null, @out int = null OUTPUT)
      as 
      Begin
          Select @in
      End
      
      exec x 1
      

      编辑

      为了澄清一点,错误被返回是因为被调用的存储过程定义了一个参数(在本例中为@param1),没有为其定义默认值。 (即@param1 int 而不是@param int = -1)如果在调用存储过程时没有为存储过程的定义参数指定参数或默认值,则会发生错误。如果您厌倦了省略没有指定默认值的输入参数,也会发生同样的事情。

      【讨论】:

      • 真的,sp 需要有输出吗?这对我来说没有多大意义。
      • 也许更好的说法是尝试执行存储过程而不为没有默认值的参数指定值会导致错误,无论参数的方向如何。
      • @MrGrieves:这可能是有道理的,IMO。当然,一个过程可以做任何事情,但它可能没有任何意义。例如,该过程可能除了输出参数之外没有其他结果,即它不会改变任何状态,只是计算一些东西。 (我知道,表值函数可能更适合于此,如果结果是标量,当然是标量函数。仍然......)
      【解决方案3】:

      您可能不得不自己忽略 OUTPUT 参数,而不是对该值做任何事情。这不像那个变量的开销是一个问题或任何东西。这里唯一的问题是你的代码会有点难看。因此,在此处发表评论,说明未使用 OUTPUT 参数,一切都应该没问题。

      【讨论】:

        【解决方案4】:

        如果您正在调用的 SP 需要传递一个参数,那么您必须在那里有一个参数。即使你忽略它的输出,它也是 SP 结构的一部分。

        将参数视为“数据契约”。如果它们不是默认值,则它们是必需的。即使这些值被忽略。

        强制您声明一个您永远不会读取的虚拟值是调用该存储过程的成本,该过程可能被某些需要使用输出参数值的东西使用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-03-31
          • 2015-10-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-01
          • 1970-01-01
          相关资源
          最近更新 更多