Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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
Asp.net 在T-SQL中将多行字段连接到一列中_Asp.net_Sql_Tsql - Fatal编程技术网

Asp.net 在T-SQL中将多行字段连接到一列中

Asp.net 在T-SQL中将多行字段连接到一列中,asp.net,sql,tsql,Asp.net,Sql,Tsql,我正在编写一个SQL查询,在该查询中,我需要对一个表执行子选择,该表通常会返回多行。我需要能够将所有行中某个字段的结果合并到一个字段中进行输出。这有可能吗?怎么可能 例如,如果SQL查询返回 id | field 1 | test1 2 | test2 3 | test3 我需要输出的字段是test1 test2 test3。 谢谢 SQLCLR自定义聚合器是另一种更好的读取解决方案,可以使用光标 declare @field nvarchar(max) declare @concat

我正在编写一个SQL查询,在该查询中,我需要对一个表执行子选择,该表通常会返回多行。我需要能够将所有行中某个字段的结果合并到一个字段中进行输出。这有可能吗?怎么可能

例如,如果SQL查询返回

id | field
1  | test1
2  | test2
3  | test3
我需要输出的字段是test1 test2 test3。 谢谢


SQLCLR自定义聚合器是另一种更好的读取解决方案,可以使用光标

declare @field nvarchar(max)
declare @concat nvarchar(max)
set @concat = ''
declare @cursor cursor
set @cursor = cursor for select field from table
open @cursor
fetch next from @cursor into @field
while @@fetch_status = 0
begin
  set @concat = concat(@concat,@field)
  fetch next from @cursor into @field
end
您的练习是在连接的字符串之间添加空格:-

尝试以下操作:

SELECT RTRIM(field)
  FROM (
                SELECT field + ' ' field
                    FROM <YOUR_TABLE>
                    FOR XML PATH('')
             ) a
下面是xml实现这一点的诀窍:

    SELECT  field + ' ' as [text()]
    FROM    YourTable
    FOR XML PATH ('')
这张照片是:

test1 test2 test3

它通常与外部应用程序一起使用,以便对每行执行一次。

作为现有答案的补充。尝试使用要使用的列名包含表达式。这样可以避免在连接的字符串中出现空值,并避免列表看起来像这样。请注意多余的空格

field1 field2   field4 field
详情请参阅


这是完全重复的:还有许多其他问题……我想回答者没有读过这篇@gbn:嗯,我读过那篇博文。它没有列出一个成功的长尾答案,我认为它们不存在。在我的机器上,这给出了:没有为“a”的第1列指定列名。更新了帖子以反映指定的列名。您必须将a更改为afield;然后它将打印field1 field2 field3,您可以通过将SELECT field+''字段更改为SELECT field+''作为[text]来修复它
field1 field2   field4 field
GO

DECLARE @tableName VARCHAR(MAX)
SELECT  @tableName = COALESCE(@tableName + ' ' ,'') + Name
FROM    sys.tables
SELECT  @tableName

GO