我有一个存储过程,其参数定义如下
@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;'
在上面的查询中计算我的总列时,如何在我的@StaffCategoryIds
逗号分隔字符串中检查类别列(比如Category2或Category5)是否存在,然后将其包含在我的Total列的计算中?
EG。如果' Category2'存在于@StaffCategoryIds
中,然后我将其包含在Total的计算中,否则我将其排除。
答案 0 :(得分:0)
尝试:
DECLARE @CategoryNames NVARCHAR(MAX) = N'Category1,Category2,Category3,Category4,Category5',
@sql NVARCHAR(MAX) = ''
SET @sql = 'SELECT TypeId,
TypeName,
Condition,
Region, ('+ REPLACE(@CategoryNames,',','+')+')
AS Total INTO ##QueryResults
FROM Table1;'
SELECT @SQL
它返回:
SELECT TypeId,
TypeName,
Condition,
Region, (Category1+Category2+Category3+Category4+Category5)
AS Total INTO ##QueryResults
FROM Table1;
然后你可以执行该语句:
EXEC @Sql
答案 1 :(得分:0)
您可以再次验证列名称系统表" sys.columns"并返回任何行,如上所示连接它们以调整您的查询
SELECT [name]
FROM
sys.syscolumns
WHERE [name] IN ('Col1,Col2...ColN')
AND OBJECT_NAME(id) = 'TableName'