Sql 将多个列连接到一个逗号分隔的字符串,并插入到新表中

Sql 将多个列连接到一个逗号分隔的字符串,并插入到新表中,sql,sql-server,Sql,Sql Server,这里有很多连接帖子,但似乎找不到解决方案: 我有一个包含20列的表: ID列1列2列3列4等 我需要将所有列连接在一起,以便有两列: ID MasterCommaDelimColumn 然后我需要将它插入到一个新表中。问题似乎在于逗号。我可以将所有内容连接在一起,但当我添加逗号时,它会将它们视为单独的列,插入失败 编辑: 重新编辑 对于MS-SQL,它将取决于列的数据类型以及它们是否可以为null,但是如果所有内容都是*char类型而不是null,那么类似的方法应该可以工作 select 1

这里有很多连接帖子,但似乎找不到解决方案:

我有一个包含20列的表:

ID列1列2列3列4等

我需要将所有列连接在一起,以便有两列:

ID MasterCommaDelimColumn

然后我需要将它插入到一个新表中。问题似乎在于逗号。我可以将所有内容连接在一起,但当我添加逗号时,它会将它们视为单独的列,插入失败

编辑:

重新编辑


对于MS-SQL,它将取决于列的数据类型以及它们是否可以为null,但是如果所有内容都是*char类型而不是null,那么类似的方法应该可以工作

select  1 as id
        ,'Hello' as col1
        ,' ' as col2
        ,'world' as col3
        ,'!' as col4
into newtable_tbl

select id
      , col1 + ',' + col2 + ',' + col3 + ',' + col4
from  newtable_tbl

首先,这听起来像个可怕的主意

但这里是它的样子

create table #ccat (id int identity (1,1) primary key, MasterCommaDelimColumn varchar(max));

Insert into #ccat (MasterCommaDelimColumn)
Select cast(c1 as varchar)
        + ','+ cast(c2 as varchar)
        + ','+ cast(c3 as varchar)
from (values(1,2,3),(3,4,5),(6,7,8))g(c1,c2,c3);

select * from #ccat;

drop table #ccat;

我不懂“from”这个词。“g”是什么?ms sql中的Im。“from…”语法是从子查询中选择的,子查询需要有名称。我使用g作为子查询名。Sql2008允许使用值列表作为子查询的等效项。因此,我从一个名为g.@jmoreno的虚拟表中进行查询-我想您忘记了将整个内容括在引号中,因此INSERTI将其视为单个字符串,而整个过程都愚蠢地作为动态sql进行。将在稍后发布最终代码。@Leigh:不,将整个内容括在引号中将插入表达式,而不是表达式的结果。我手工输入,省略了MasterCommadeLim列周围的括号,但除此之外,它可以工作并返回3行,第二列是逗号分隔的字符串。
select  1 as id
        ,'Hello' as col1
        ,' ' as col2
        ,'world' as col3
        ,'!' as col4
into newtable_tbl

select id
      , col1 + ',' + col2 + ',' + col3 + ',' + col4
from  newtable_tbl
create table #ccat (id int identity (1,1) primary key, MasterCommaDelimColumn varchar(max));

Insert into #ccat (MasterCommaDelimColumn)
Select cast(c1 as varchar)
        + ','+ cast(c2 as varchar)
        + ','+ cast(c3 as varchar)
from (values(1,2,3),(3,4,5),(6,7,8))g(c1,c2,c3);

select * from #ccat;

drop table #ccat;