【问题标题】:How to prepend column names into column values?如何将列名添加到列值中?
【发布时间】:2016-06-20 01:43:03
【问题描述】:

有下表:

| 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 中使用,表的名称将作为参数传递。

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

【问题讨论】:

  • 您可以调查INFORMATION_SCHEMA.COLUMNS 视图以获取列名
  • 这个问题有点不清楚。 “只有其中一个必须以列名作为前缀显示数据”是什么意思?如果我们可以有两个表数据和一些输出可能会更清楚
  • 大概你想要DECLARE @ VARCHAR(MAX) = ''; SELECT @+= ', ''' + COLUMN_NAME + '@'' + CAST(' + COLUMN_NAME + ' AS VARCHAR(MAX)) [' + COLUMN_NAME + ']' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'myTable' 之类的东西以及围绕它的动态查询?
  • 所以这里还有一些问题。你知道要从作为参数传入的表中选择多少个字段和哪些字段吗?以及应该在哪一列上与另一张表连接?

标签: sql sql-server tsql dynamic-sql


【解决方案1】:

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

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)

您可以调整它以链接另一个表或多个表

【讨论】:

    猜你喜欢
    • 2022-12-18
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 2021-11-21
    • 2021-06-18
    • 1970-01-01
    • 2019-06-13
    相关资源
    最近更新 更多