我有以下Sql Server 2016 SELECT语句,它只返回 1行:
SELECT TOP 1 * FROM tempdb.dbo.IMTD
如何将值连接为逗号分隔的字符串? 注意:此临时表的列名称未知,因为它们可以变化。
谢谢。
答案 0 :(得分:0)
或许这样的事情:
-- Sample data
DECLARE @someTable TABLE (SomeID int identity, SomeTxt varchar(100));
INSERT @someTable VALUES ('row1'),('row2'),('row3');
-- Solution
SELECT ConcatinatedString =
STUFF
((
SELECT ','+SomeTxt
FROM @someTable
FOR XML PATH(''), TYPE
).value('.','varchar(100)'),1,1,'');
答案 1 :(得分:0)
您可以尝试的其他解决方案就是这个。
SELECT LTRIM(RTRIM(<ColumnName1>)) + ',',
LTRIM(RTRIM(<ColumnName2>)) + ',',
...
LTRIM(RTRIM(<ColumnNamen>)) + ','
FROM tempdb.dbo.IMTD
如果你只想要一行保持那个顶部1在那里像
SELECT TOP 1
LTRIM(RTRIM(<ColumnName1>)) + ',',
LTRIM(RTRIM(<ColumnName2>)) + ',',
...
LTRIM(RTRIM(<ColumnNamen>)) + ','
FROM tempdb.dbo.IMTD
LTRIM和RTRIM将删除任何空格,这应该允许您将结果集复制并粘贴到您可能需要的任何位置。您需要为每个列名执行此操作。
答案 2 :(得分:0)
您可以使用以下查询从临时表中获取列名。
DECLARE @ColumnNames NVARCHAR(MAX)
SELECT
@ColumnNames= COALESCE(@ColumnNames +',','')+COLUMN_NAME
FROM
TempDB.INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = '#TempTableName'
答案 3 :(得分:0)
您可以使用动态查询,如下所示:
DECLARE @COLS VARCHAR(MAX) = ''
SELECT @COLS = @COLS + ',' + COLUMN_NAME
FROM tempdb.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME LIKE '#table[_]%' -- Dynamic Table (here, Temporary table)
DECLARE @COLNAMES VARCHAR(MAX) = REPLACE(STUFF(@COLS, 1, 1, ''), ',', '+ '','' +')
Declare @cmd varchar(max) = 'Select ' + @COLNAMES + ' as CSVCol from #table'
-- will generate
-- Select Column1+ ',' +Column2+ ',' +Column3 as CSVCol from #table
EXEC (@cmd)