【问题标题】:T-SQL - Include table name (or alias) concatenated with column name in result set?T-SQL - 在结果集中包含与列名连接的表名(或别名)?
【发布时间】:2020-08-13 13:54:11
【问题描述】:

在加入 3 个以上的表并使用 SELECT * 时使用 SSMS,我想知道是否有一种简单的方法(动态)在结果集中包含表名和列名,而无需输入所有所需的列.

例如:

Table1
Table2
Table3
SELECT *
FROM Table1 t1
LEFT JOIN Table2 t2 ON t2.keyA = t1.keyA
LEFT JOIN Table3 t3 ON t2.keyB = t3.keyB

尝试产生类似的输出

Table1-Column1, Table2-Column1, Table3-Column1

t1.Column1, t2.Column1, t3.Column1

【问题讨论】:

  • 不,没有。您需要正确定义列及其别名。您可以使用动态 SQL,但除非您精通该语言,并且了解它所附带的所有注意事项,否则您不应该使用它。如果您精通该语言,您就会知道正确的答案是正确地写出您的查询。
  • 有扩展通配符的 SSMS 插件。我有一个来自 ApexSQL Refactor 的,需要支付许可费。
  • @larnu - 如果查询的目的是临时的或快速研究某些东西,那么浪费时间从多个连接表中输入 50 多列是没有意义的。
  • 如果它是一个临时且快速的解决方案,那么使用相同的名称将不是问题,@Seth,因为您可以在您可能将数据复制到的任何位置进行修复。跨度>

标签: sql sql-server datatable


【解决方案1】:

如果您有很多列,有一种简单的方法可以做到这一点,但不是动态的。如果您只有几列,不值得尝试手动完成。

看看这两个方法:https://blog.sqlauthority.com/2012/06/06/sql-server-tricks-to-replace-select-with-column-names-sql-in-sixty-seconds-017-video/

第一种方法(拖放列)在您的情况下没有用,因为我们需要将所有列对齐在不同的行上。第二个(生成创建表脚本)是我们需要的。

为 table1 生成创建表并将 table1 所需的列复制粘贴到查询中,然后为 table2 和 table3 重复。确保它们都在同一个编辑器列中对齐。

然后,“魔术”,只需按住Alt键,在t1的第一列名称的逗号和第一个字母之间单击并拖动以选择t1的第一列到最后一列之间的线条t1。键入“t1.”。就是这样。重复 t2 和 t3。

这与 sql-server 无关,也与 SSMS 无关,但适用于任何支持多行编辑的体面的编辑器。

【讨论】:

  • 谢谢,这篇文章很有用,值得赞赏!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-03
  • 1970-01-01
  • 2010-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多