【问题标题】:COALESCE STRING IN sql STATEMENT在 sql 语句中合并字符串
【发布时间】:2014-07-08 12:05:07
【问题描述】:

我有一个 COALESCE 语句从表中提取数据:

DECLARE @Output NVARCHAR(MAX)

SELECT @Output = COALESCE(@Output + ', ', '') +  '''' + tCCGroup + '''' 
FROM tblActivityPerPPCC_Matrix
WHERE tPPCC = 'NSEA0101'

SELECT @Output OUTPUT

具有以下输出。

'FADT', 'FD10RB', 'WA600'

我想将此输出字符串(现在位于变量@Output 中)插入到以下语句中:

SELECT * FROM XYZ
WHERE Column_Name IN (<< THE OUTPUT FROM COALESCE >>)

类似于

SELECT * FROM XYZ
WHERE Column_Name IN ('FADT', 'FD10RB', 'WA600')

这条语句会变成Cursor中的动态语句

任何帮助将不胜感激。

皮埃尔

【问题讨论】:

  • 你可以使用这个答案:stackoverflow.com/questions/24540337/…
  • SELECT * FROM XYZ WHERE Column_Name IN (SELECT tCCGroup FROM tblActivityPerPPCC_Matrix WHERE tPPCC = 'NSEA0101')
  • 我添加了 SQL Server 标记,因为它看起来像那种语法
  • 为什么要将表中的一组行转换为逗号分隔的字符串,而不是仅使用表中的行?奇怪的
  • 所以,你有一个(可能被破坏的)例程,它接受 多个 值并将它们塞进一个字符串中,然后你想取那个字符串并且(当它转out) 将其拆分回单独的值。

标签: sql sql-server coalesce


【解决方案1】:

根据您提到的描述,您不需要创建临时变量。您可以为此使用子查询。

SELECT * 
FROM XYZ 
WHERE Column_Name IN ( SELECT tCCGroup 
                       FROM tblActivityPerPPCC_Matrix 
                       WHERE tPPCC = 'NSEA0101' )

【讨论】:

    【解决方案2】:

    也许我误解了这个问题,但是将该字符串合并到动态生成的查询中看起来像这样。

    DECLARE
              @Output VARCHAR(MAX)
            , @SQL  VARCHAR(MAX)
            , @Table_name varchar(64) 
            , @Column_name varchar(64) 
    
    set @Table_name = 'test'
    set @Column_name = 'xyz'
    
    SELECT @Output = COALESCE(@Output + ', ', '') +  '''' + tCCGroup + '''' 
    FROM tblActivityPerPPCC_Matrix
    WHERE tPPCC = 'NSEA0101'
    
    set @sql = 'SELECT * '
               + ' FROM ' 
               + @Table_name
               + ' WHERE ' 
               + @Column_Name
               + ' IN (' 
               + @Output
               + ')'
    
    select @sql
    -- exec (@sql)
    

    【讨论】:

      【解决方案3】:

      哎呀。为什么需要在游标内运行动态 sql?从非常模糊的帖子中,我认为根本不需要光标。如果您能解释您正在尝试做什么并发布一些 ddl 和示例数据(或 sql fiddle),我很乐意帮助您从流程中删除光标。

      【讨论】:

      • 我的要求为时过早。看到这个新帖子:link
      猜你喜欢
      • 2017-12-06
      • 1970-01-01
      • 1970-01-01
      • 2013-09-22
      • 1970-01-01
      • 2014-06-13
      • 1970-01-01
      • 2014-09-29
      • 2011-07-05
      相关资源
      最近更新 更多