我想将一个SQL表从一行转换为一列结果。该语句只返回一条记录,但在运行查询时,我不知道表中属性的名称。所有查询都知道是表和ID列,以返回相关记录。
即。我想将此作为一列结果返回:
SELECT * FROM ExampleTable WHERE (PKCol = 'XYZ');
这是我在SQL Server 2012中运行查询时所知道的唯一信息。
由于
答案 0 :(得分:0)
您应该从sys.columns系统视图中检索列名,在游标中连接它们并使用UNPIVOT。
这样的事情:
DECLARE @columns AS NVARCHAR(MAX) = '', @columns_char AS NVARCHAR(MAX) = '', @query AS NVARCHAR(MAX)
SELECT @columns += ',' + c.name, @columns_char += ',CAST(' + c.name + ' AS VARCHAR(255)) AS ' + c.name FROM sys.columns AS c WHERE c.object_id = OBJECT_ID(N'Your Table Name')
SELECT @columns = STUFF(@columns, 1, 1, ''), @columns_char = STUFF(@columns_char, 1, 1, '')
SELECT @columns, @columns_char
SET @query =
N'SELECT
column_name,
col
FROM
(
SELECT ' + @columns_char + ' FROM ' + Your_table_name + N' AS t
WHERE t.id = ' + Your Id + N'
) AS sel
UNPIVOT
(
col FOR column_name IN(' + @columns + ')
) AS upt';
EXEC sp_executesql @query