使用STRING_AGG动态生成多变量SQL字符串时的变量匹配问题
问题分析与解决
你的核心问题是:使用STRING_AGG时没有根据临时表中不同的CheckColumn值匹配对应的变量,而是统一调用了@v1_YYYY,导致两行都输出了同一个变量。
正确写法
情况1:生成包含变量名的目标字符串(即你期望的格式)
DECLARE @sql varchar(100); SELECT @sql = STRING_AGG( CheckColumn + ' EQ @' + CASE CheckColumn WHEN 'GJAHR' THEN 'v1_YYYY' WHEN 'LMNON' THEN 'v2_MM' END, ' AND ' ) FROM #table_A;
执行后@sql的值为:GJAHR EQ @v1_YYYY AND LMNON EQ @v2_MM
情况2:生成包含变量实际值的字符串
如果你的真实需求是拼接变量的具体值(比如GJAHR EQ '2022' AND LMNON EQ '07'),可以用以下写法:
DECLARE @sql varchar(100); SELECT @sql = STRING_AGG( CheckColumn + ' EQ ''' + CASE CheckColumn WHEN 'GJAHR' THEN @v1_YYYY WHEN 'LMNON' THEN @v2_MM END + '''', ' AND ' ) FROM #table_A;
内容的提问来源于stack exchange,提问作者pythondumb
相关产品推荐
相关产品推荐

