如何将列名添加到列值中?

时间:2016-06-20 01:43:03

标签: sql sql-server tsql dynamic-sql

有下表:

| Some Table      |
| Id | Name | Age |
| 23 | Marc | 41  |
| 54 | Edu  | 34  |

我想得到:

|Another Table's Column| Id    | Name      | Age     |
| .....                | Id@23 | Name@Marc | Age@41  |
| .....                | Id@54 | Name@Edu  | Age@34  |

此查询将在动态sql中使用,表的名称将作为参数传递。

最终查询必须显示至少两个表的数据,并且其中只有一个必须以列名作为前缀显示数据。

1 个答案:

答案 0 :(得分:0)

不确定我理解你想要什么,但是这里是在任何传递的表的结果中显示列名的脚本:

DECLARE @t NVARCHAR(128) = '[Person].[Person]';
DECLARE @l NVARCHAR(2000) = '';
DECLARE @s NVARCHAR(4000) = '';

SELECT @l = (
SELECT ' ''@' + Name + ''' + CAST([' + Name + '] as VARCHAR(max)) as [' + Name + '],'
FROM sys.columns
WHERE object_id = OBJECT_ID(@t)
ORDER BY column_id
FOR XML PATH(''));

SELECT @s = 'SELECT ' + LEFT(@l,LEN(@l)-1) + ' FROM ' + @t + ';'

PRINT @s
EXEC (@s)

您可以将其调整为链接另一个表或多个表