【问题标题】:T-SQL Query for Setting Column Aliases用于设置列别名的 T-SQL 查询
【发布时间】:2016-10-08 19:56:43
【问题描述】:

我正在寻找一种在 SSMS 中编写查询的方法,该查询将连接表和列,从而为我提供更具可读性的别名。

我实际上使用的是 SSMS,右键单击对象资源管理器中的视图,然后选择新视图。

我从可用表格列表中选择我需要的表格。

然后我在 SSMS 图表窗格中设置所需的连接,并从各个表中选择我想要的所有列。

在条件窗格中,我可以看到“列”、“别名”和“表”列。 Column 列中的值始终是唯一的,例如:

Column = RequestedDeliveryDate
Alias = (blank)
Table = Stock Item

但是!

只要列值不唯一,SSMS 就会为其分配自己的别名,例如:

Column = AddressLine1
Alias = Alias1
Table = Customer

Column = AddressLine1
Alias = Alias2
Table = Supplier

这些是我正在处理的大量视图,因此 SSMS 分配了很多别名,这本身不是问题,但会使我的 Visual Studio 项目中的 select 语句更加难以阅读:

SELECT RequestedDeliveryDate, Alias1, Alias2 FROM vwMyView

我所追求的只是在 SSMS 中以某种方式编写一个查询,该查询将连接表和列以给我一个更具可读性的别名:

Column = AddressLine1
Alias = CustomerAddressLine1
Table = Customer

Column = AddressLine1
Alias = SupplierAddressLine1
Table = Supplier

这将使我的 SELECT 查询更具可读性:

SELECT RequestedDeliveryDate,CustomerAddressLine1,SupplierAddressLine1 FROM vwMyView

我可以在 Criteria Pane 中手动分配别名,但在许多具有许多重复列名的视图中非常繁琐。

【问题讨论】:

  • 为什么不自己写视图呢?设计师不会想出非常有意义的名字。
  • 是的,当您让设计师为您完成工作时,这是您接受的限制。你绝对应该为每一列选择你自己有意义的名字。
  • 无论您使用的是设计器还是 tSQL,您都必须手动键入别名。我不知道有任何第 3 方扩展可以为您工作。
  • 我的视图有 20 多个表,超过 200 列。更改以下内容会非常繁琐,需要处理 20 多个视图:dbo.SLCustomerAccount.AnalysisCode15 AS Expr61、dbo.SLCustomerAccount.AnalysisCode16 AS Expr62、dbo.SLCustomerAccount.AnalysisCode17 AS Expr63、dbo.SLCustomerAccount.AnalysisCode18 AS Expr64、dbo。 SLCustomerAccount.AnalysisCode19 AS Expr65, dbo.SLCustomerAccount.AnalysisCode20 AS Expr66
  • 理想情况下(使用上面评论中的第一行)我希望别名为 SLCustomerAccountAnalysisCode15,而不是 Expr61

标签: sql-server


【解决方案1】:

我讨厌视图设计器。只需使用代码创建视图。例如:

CREATE VIEW [dbo].[MyViewName]
AS

SELECT RequestedDeliveryDate,CustomerAddressLine1,SupplierAddressLine1 FROM vwMyView

GO

如果您愿意,可以从视图设计器中复制连接和过滤器,然后更改 SELECT 部分中的字段别名。

【讨论】:

  • 但我说的是 30-40 个视图,每个视图最多有 100 个重复的列名。我不敢相信使用查询,我不能连接表和列名来生成一个可读的别名!
  • 示例视图的 SQL SELECT 如下所示。如您所见,我已经手动编辑了前几个字段的列别名,但是如果您查看 SELECT 的末尾,您会看到 SSMS 已将别名命名为 Alias70。必须有某种方法来创建连接表名和列名的查询,以创建我想要的别名!
  • SELECT dbo.SOPOrderReturnLine.ItemCode AS SOPOrderReturnLineItemCode,dbo.SOPOrderReturnLine.ItemDescription AS SOPOrderReturnLineItemDescription,dbo.SOPOrderReturnLine.LineQuantity AS SOPOrderReturnLineLineQuantity,dbo.SOPOrderReturnLine.LineTypeID AS SOPOrderReturnLineLineTypeID,dbo.SOPOrderReturnLine.LineTotalValue AS SOPOrderReturnLineLineTotalValue,DBO .SOPOrderReturnLine.LineTaxValue AS SOPOrderReturnLineLineTaxValue,
  • dbo.SLCustomerAccount.AnalysisCode13 AS Expr59, dbo.SLCustomerAccount.AnalysisCode14 AS Expr60, dbo.SLCustomerAccount.AnalysisCode15 AS Expr61, dbo.SLCustomerAccount.AnalysisCode16 AS Expr62, dbo.SLCustomerAccount.AnalysisCode17 AS Expr63, dbo。 SLCustomerAccount.AnalysisCode18 AS Expr64, dbo.SLCustomerAccount.AnalysisCode19 AS Expr65, dbo.SLCustomerAccount.AnalysisCode20 AS Expr66
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-29
  • 2022-01-15
  • 1970-01-01
  • 2012-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多