【问题标题】:Execute a stored procedure within a case statement在 case 语句中执行存储过程
【发布时间】:2014-12-01 05:39:06
【问题描述】:

我有一个带有Case When 子句的Insert Into Select 语句。我想在When 语句中执行一个存储过程。

Insert into Orders(id, custId, custIntake)
Select id, custId custIntake = 
   Case
     When ( Exec mySProc(custId) = 1 ) = 'InStore'
     When ( Exec mySProc(custId) = 0 ) = 'OutsideStore'
     Else null
   End
From OrdersImport

如何在Case When 中运行Exec mySProc(custId)

【问题讨论】:

  • 就我个人而言,我可能会将其作为函数而不是存储过程运行。除非有理由需要将此作为存储过程。或者,您是否可以在执行插入之前不计算存储过程值,例如传递一个已计算值的变量,除非您一次执行多个插入。
  • 在 INSERT/SELECT 之外执行 SP,将输出存储在输出参数变量中并在 WHEN 中使用
  • @YuriyGalanter 我需要在插入时从选择中获取动态 ID。 CustId 将是动态的并传递到存储过程中。我已将问题更新为更准确。
  • 你不能那样做。存储过程是做什么的?可以写成标量 UDF 吗?还是最好完全内联?
  • 用函数代替过程

标签: sql sql-server tsql stored-procedures case-when


【解决方案1】:

如果您想像这样运行它,我建议您将“mySProc”过程转换为标量用户定义函数。存储过程不能做你想做的事。

【讨论】:

    【解决方案2】:

    如果我理解正确,那么您需要的是在 WHEN 语句为真时运行的代码。 只需使用 CASE > WHEN > THEN,如下所述:http://msdn.microsoft.com/en-us/library/ms181765.aspx

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      这样做。

      如果您为 id 列设置了自动增量,则不需要在查询中提及。如果需要,可以添加。

      Insert into orders(custId, custIntake) 
      Select custId, (CASE WHEN custId = '1' THEN 'InsideStore' ELSE 'OutsideStore' END)  from ordersimport;
      

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-23
        • 2011-04-29
        • 2018-06-02
        • 2019-07-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多