【问题标题】:How to pass multiple values to a stored procedure如何将多个值传递给存储过程
【发布时间】:2017-03-29 21:34:55
【问题描述】:

我有一个带有下拉数据验证框的 Excel 工作表,用户可以在其中从整数值列表中选择来确定部门,或者使用单词“ALL”来获取所有部门。我正在使用 SQL 将该单元格的值传递给存储过程。在 SQL 中,我有 WHERE Department=@Dept

如果我只允许一个部门选择,这很好,但我也想允许所有部门。

对如何实现这一点有任何想法吗? IN 操作符或其他东西是否需要某种技巧?

【问题讨论】:

    标签: sql sql-server excel stored-procedures


    【解决方案1】:

    使用CASE 语句,所以如果它是“ALL”,您可以传回部门字段。如果是其他任何内容,请传递您发送的值:

    Where Department = CASE @input WHEN 'ALL' Then Department ELSE @input END
    

    【讨论】:

    • 感谢您的帮助。最终有帮助的语法如下: WHERE Department=case when @Dept='ALL' then Department else @Dept end
    【解决方案2】:

    这里存储的脚本有两个解决方案:

    1. 输入if 语句,然后您将需要查询集。
    2. 在条件中添加iif/case 语句。

    【讨论】:

    • 感谢您的帮助!我决定使用方法2,这很有帮助!您与其他人的回答非常有帮助。
    【解决方案3】:

    如果您的用户选择“ALL”,您可以将参数设置为 NULL:

    select * from table1 WHERE Department=isnull(@Dept,Department)
    

    @Dept 的值为NULL 时,查询将是:

    select * from table1 WHERE Department=Department
    

    就像1=1

    【讨论】:

    • 谢谢。那么如何将参数设置为 NULL。正确的语法是什么?
    • 感谢您的帮助!您的回答与其他人一起帮助我解决了这个问题。