一尘不染

SQL STRING_AGG() 使用多个变量动态生成 sql 字符串

sql

这是我在使用 STRING_AGG 时遇到的问题。

假设我有一张桌子,#table_A(这是一张临时表)

   ID     CheckColumn
   1        GJAHR
   2        LMNON

然后我声明两个变量,即。

   DECLARE @v1_YYYY varchar(4)
   DECLARE @v2_MM   varchar(4)
   SET @v1_YYYY = '2022'; 
   SET @v2_MM ='07';

然后我试图生成一个如下所示的字符串:

   GJAHR EQ @v1_YYYY AND LMNON EQ @v2_MM

我知道我可以像下面这样使用 STRING_AGG()

   DECLARE @sql varchar(100);
   SELECT @sql = STRING_AGG(x.checkColumn + 'EQ' + '''' + @v1_YYYY + '''' , ' AND ') 
                 FROM  #table_A

但这会创建以下字符串:

   GJAHR EQ @v1_YYYY AND LMNON EQ @v1_YYYY

我在这里缺少什么?


阅读 82

收藏
2022-07-21

共1个答案

一尘不染

您可以使用case表达式检查 ID 值并决定哪个变量参与连接

   SELECT @sql  = STRING_AGG(checkColumn + 'EQ' + '''' 
                + case when ID = 1 then @v1_YYYY else @v2_MM end
                + '''' , ' AND ') 
   FROM  #table_A
2022-07-21