【问题标题】:can we use CASE with EXEC我们可以将 CASE 与 EXEC 一起使用吗
【发布时间】:2012-04-25 23:45:58
【问题描述】:

我想根据用户输入选择要执行的存储过程。有点像 -

EXEC
CASE @InputParam 
  WHEN 'XML' THEN GetXMLData @ID, 'y'
  WHEN 'TABLE' THEN GetTableData @ID, 'y'
END

这可以用CASE 完成还是我应该考虑使用If 构造?

【问题讨论】:

  • CASE 用于查询中的内联评估。你想要IF,因为它是一个流控制结构。

标签: sql-server case-when


【解决方案1】:

你可以这样做:

IF @InputParam = 'XML'
BEGIN
   EXEC GetXMLData @ID, 'y'
END

IF @InputParam = 'TABLE'
BEGIN
   EXEC GetTableData @ID, 'y'
END

【讨论】:

  • 我认为您的意思是在这里使用IF 而不是CASE...这是无效的语法。
  • 是的@JNK 是对的,我之前尝试过上面的代码,但没有成功。
  • @neuDev33 好的,你可以使用IF。我使用的是 Sybase-ASE 语法:P
【解决方案2】:

在这种情况下,我认为即使 SQL Server 允许这样做,IF 也会更清晰。

IF @InputParam = 'XML'
BEGIN
    exec GetXMLData @ID, 'y'
END
ELSE IF @InputParam = 'TABLE'
BEGIN
    exec GetTableData @ID, 'y'
END

【讨论】:

    【解决方案3】:

    您想在此处使用IF 构造:

    IF @InputParam = 'XML'
        EXEC GetXMLData @ID, 'y'
    IF @InputParam = 'TABLE'
        EXEC GetTableData @ID, 'y'
    

    【讨论】:

      【解决方案4】:

      您可以使用 CASE,但您必须使用 EXEC (cmd):

      DECLARE 
      @cmd VARCHAR(200)
      , @InputParam VARCHAR(5) ='TABLE'
      , @ID INT =1
      
      SELECT @cmd = ( CASE @InputParam 
      WHEN 'XML' THEN 'GetXMLData '
            +CONVERT(VARCHAR,@ID)+', '+CHAR(39)+'y'+CHAR(39)
      WHEN 'TABLE' THEN 'GetTableData '
            +CONVERT(VARCHAR,@ID)+', '+CHAR(39)+'y'+CHAR(39)
      END)
      EXEC(@cmd)
      

      【讨论】:

        猜你喜欢
        • 2022-01-04
        • 2012-07-13
        • 1970-01-01
        • 2021-06-02
        • 2019-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-17
        相关资源
        最近更新 更多