将行转换为包含列名的串联字符串

时间:2016-04-06 16:01:29

标签: sql-server tsql

我有一张几百列的桌子。有没有办法将每行转换为包含列标题的单个连接字符串,而不必列出查询中的每一列?我已经使用查询完成了一些操作,但这对于每个列都很费力并且看起来很容易出错。这是一个简短的片段,显示了以我需要的格式连接的三列,以逐列方式完成:

SELECT 
 Concat( 
   IIf(Id IS NULL, Null, Concat('Id: ' , [Id] , '\n') )  , 
   IIf(StandardClientId IS NULL, Null, 
     Concat('StandardClientId: ' , [StandardClientId] , '\n') )  , 
   IIf(ClientName IS NULL, Null, 
     Concat('ClientName: ' , [ClientName] , '\n') ) 
 )  AS ReportLine
FROM dbo.DataDecoded; 

我使用的是Microsoft SQL Server 2014 Standard。

由于

1 个答案:

答案 0 :(得分:1)

最简单的方法是编写一个查询,为您编写语句的烦人部分:

SELECT ORDINAL_POSITION,
    COLUMN_NAME,
    CONCAT('IIF(',COLUMN_NAME,' IS NULL, NULL, CONCAT(''', COLUMN_NAME, ''', '': '',', QUOTENAME(COLUMN_NAME), ', ''\n'')), ')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'dbo'
    AND TABLE_NAME = 'DataDecoded'
ORDER BY ORDINAL_POSITION;

你可以更进一步,让整个事物充满活力,但这可能是浪费时间。