选择所有列并按它们的表和列命名

Posted

技术标签:

【中文标题】选择所有列并按它们的表和列命名【英文标题】:SELECT ALL columns and name them by their table and column 【发布时间】:2019-08-31 00:22:20 【问题描述】:

我有一个包含很多连接的语句。我想获取报告请求者的所有列,但我还想在列名中包含表名。我不想得到一个名为“name”的列,而是想根据它的表得到一个名为“user.name”的列。我希望这个过程可以自动完成,而不需要写表名。

SELECT * AS TABLE_NAME.* FROM THOSE_TABLES  

【问题讨论】:

简单的答案:使用简单的 SQL 语句,这在 AFAIK 中是不可能的。 可能与此有关:***.com/a/13153422/1855988 【参考方案1】:

您需要使用动态 sql。首先使用information_schemastuff创建你使用的表名及其对应列名的键值关系。

select column_name + '.' + table_name 
from information_schema.columns 
where table_name in ( 'table1', 'table2' ...)

之后在您的最终输出查询中使用此值来声明列名,但这也需要使用动态 sql 完成,最后需要使用sp_executesp_executesql 执行以获得最终结果。

最终查询将是这样的......

declare @col varchar(max)
set @col = Select stuff( 
          (select ', ' + column_name + '.' + table_name 
           from information_schema.columns 
           where table_name in ( 'table1', 'table2' ...) for xml 
           path('')),1,1,'')

declare @query nvarchar(max) = '
select ' + @col + ' 
from table1 
inner join table2 on table1.id = table2.id '

exec sp_executesql @query

您可以根据您的使用和条件更改查询中的某些部分。

【讨论】:

获取:查找错误 - SQL Server 数据库错误:关键字“选择”附近的语法不正确。这是第 2 行选择。 @syrkull:您能否分享一些您尝试应用内连接并需要结果的示例表结构......或者您可以制作小提琴以产生错误,这更有帮助。

以上是关于选择所有列并按它们的表和列命名的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法列出 ORACLE 查询中使用的表和列? [复制]

Laravel - 数据库、表和列命名约定?

Hibernate MySQL 查找未映射的表和列

实体框架迁移重命名表和列

如何参数化 Postgres-custom-function 中的表和列,如果值存在则选择 PK,否则插入并返回 PK?

列出我的数据库中的所有表和列 (ORACLE)