我有一个存储过程,它的主要部分是一个看起来像这样的选择查询:
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
,然后与OPTION1
,OPTION2
等进行比较。
我认为这可以以一种或另一种方式完成。我只是不知道如何开始。
答案 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)) + ',%'