SQL声明中的COALESCE STRING

时间:2014-07-08 12:05:08

标签: sql sql-server coalesce

我有一个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中的动态语句

任何帮助都将不胜感激。

皮尔

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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)

答案 2 :(得分:0)

让人惊讶。为什么需要在游标中运行动态sql?从非常模糊的帖子中我看到根本不需要光标。如果你能解释你想要做什么并发布一些ddl和样本数据(或sql小提琴),我很乐意帮助你从你的过程中删除光标。