【发布时间】:2016-10-02 02:39:28
【问题描述】:
我有一个存储过程,其参数定义如下
@CategoryNames NVARCHAR(MAX)
上述参数从应用程序中获取一个逗号分隔的字符串,例如该值可以是这样的@StaffCategoryIds=N'Category1,Category2,Category3,Category4,Category5'
然后我有下面的示例 sql 查询
SET @sql = @sql + 'TypeId,
TypeName,
Condition,
Region,
(Category1 + Category2 + Category3 + Category4 + Category5) AS Total INTO ##QueryResults
FROM Table1;'
在上面的查询中计算我的 Total 列时,如何在将其包含在我的 Total 列的计算中之前检查我的 @StaffCategoryIds 逗号分隔字符串中是否存在类别列(比如 Category2 或 Category5)?
例如。如果@StaffCategoryIds 中存在“Category2”,则我将其包含在 Total 的计算中,否则我将其排除。
【问题讨论】:
-
无特定顺序:(1)检查每一个并在每列周围使用
case(case when ',' + @CategoryNames + ',' like '%,Category1%' then Category1 else 0 end + ...),(B)类似,但首先处理解析并使用标志(@987654328 @) 在查询中,(iii) 在查询之后(可能在应用程序代码中)单独对列求和并根据需要组合值,(IV) 动态 SQL 与从列表构建的查询,...。这取决于行数、运行查询的频率、group by或其他子句...。
标签: tsql sql-server-2005