Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql语句中的合并字符串_Sql_Sql Server_Coalesce - Fatal编程技术网

sql语句中的合并字符串

sql语句中的合并字符串,sql,sql-server,coalesce,Sql,Sql Server,Coalesce,我有一个从表中提取数据的合并语句: DECLARE @Output NVARCHAR(MAX) SELECT @Output = COALESCE(@Output + ', ', '') + '''' + tCCGroup + '''' FROM tblActivityPerPPCC_Matrix WHERE tPPCC = 'NSEA0101' SELECT @Output OUTPUT 具有以下输出 'FADT', 'FD10RB', 'WA600' 我想将变量@output中的

我有一个从表中提取数据的合并语句:

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 >>)
此语句将在游标中转换为动态语句

任何帮助都将不胜感激


Pierre

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

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

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

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)

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

您可以使用以下答案:从XYZ中选择*,其中从tblActivityPerPPCC矩阵中选择tCCGroup中的列名称,其中tPPCC='NSEA0101'我将sql Server标记添加为它看起来像是那种类型的语法为什么要将表中的一组行转换为逗号分隔的字符串,而不是只使用表中的行?奇怪的是,你有一个可能被破坏的例程,它接受多个值并将它们塞进一个字符串中,然后你想接受这个字符串,结果又将其拆分成单独的值。我的请求还为时过早。请参阅此新帖子:
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)