使用不同的参数计数多次运行SP

时间:2019-07-24 10:32:30

标签: sql sql-server stored-procedures

我有一个存储过程,它的主要部分是一个看起来像这样的选择查询:

SELECT 
    Col_A, Col_B,
    Col_C, Col_D,
    ...,
FROM
    TableName
WHERE
    Col_C = 'this' OR Col_C = 'that' OR Col_C = 'Other'

现在,如果我想更改WHERE子句中的值并通过@Parameter填充它们怎么办?如果这是理想的情况,我可以简单地做到:

WHERE Col_C = @Parameter

但是,每次运行此存储过程时,Col_C可能存在的可能性数将与1 to 15不同的选项有所不同。我真的不认为最好有15个参数,然后检查每个参数是否有一个值,然后将该值与该列进行比较,所以这是我的最佳主意,因此,我向社区寻求有关我可能是什么的想法俯瞰。

我想知道我是否可以按照以下方式做某事:

EXEC @return_value = [dbo].[BM-GetWeeklyEfficiencyInformation]
     @Start_Date = ...
     @End_Date = ...
     @ResourceGroupList = 'OPTION1 OPTION2 OPTION3 OPTION4 OPTION5 ...'

SELECT @return_value

然后,在WHERE的{​​{1}}子句中,将其与SP,然后与OPTION1OPTION2等进行比较。

我认为这可以以一种或另一种方式完成。我只是不知道如何开始。

2 个答案:

答案 0 :(得分:0)

您可以尝试-下面的查询描述了如何参数化IN子句。

SELECT 
       Col_A,
       Col_B,
       Col_C,
       Col_D,
       ...,
FROM
       TableName
WHERE
       Col_C in( select value from  STRING_SPLIT('this,that,Other',','))

注意:SQL Server 2016或更高版本中提供了STRING_SPLIT函数,如果您在SQL Server 2016以下使用,则可以编写自定义拆分函数。

答案 1 :(得分:0)

如果您可以通过逗号分隔的所有选项,则可以使用以下查询

SELECT 
       Col_A,
       Col_B,
       Col_C,
       Col_D,
       ...,
FROM
       TableName
WHERE
 ',' + 'this,that,Other' + ',' Like  '%,' + lTrim(rTrim(Col_C)) + ',%'

DEMO