如果我要向 Microsoft SQL Server 中的表添加列,我可以控制该列在查询中的逻辑显示位置吗?

我不想打乱磁盘上列的物理布局,但我希望尽可能将列逻辑分组在一起,以便 SQL Server Management Studio 等工具以方便的方式列出表的内容。

我知道我可以通过 SQL Management Studio 进入表的“设计”模式并拖动列的顺序来完成此操作,但我希望能够在原始 SQL 中完成此操作,以便我可以执行排序从命令行编写脚本。

有帮助吗?

解决方案

如果不创建新表,则无法以编程方式(即安全的方式)执行此操作。

当您提交重新排序时,企业管理器执行的操作是创建一个新表,移动数据,然后删除旧表并将新表重命名为现有名称。

如果您希望列按特定顺序/分组而不改变其物理顺序,则可以创建一个可以是您想要的任何视图。

其他提示

我认为这里的每个人都缺少的是,尽管不是每个人都必须处理遍布全国和世界各地安装的 10 个、20 个或 1000 个相同软件系统的实例......我们这些设计商业销售软件的人就是这样做的。因此,我们随着时间的推移扩展系统,通过在需要新功能时添加字段来扩展表,并且当这些字段被识别为属于现有表时,因此,十多年来的扩展、增长、添加字段等到桌子....然后必须使用这些表从设计到支持,有时还要深入研究原始数据/故障排除以调试新的功能错误......当您的表可能包含 30-40-50 甚至 90 个字段并且在严格规范化的数据库中时,如果在前几个字段中没有您想要看到的主要信息,这是令人难以置信的烦恼。

出于这个确切的原因,我经常希望我能做到这一点。但缺少完全按照 SQL 所做的操作,按照我想要的方式为新表构建创建脚本,将插入写入其中,然后从现有表中删除所有现有约束、关系、键、索引等并重命名将“新”表恢复为旧名称,然后读取所有这些键、关系、索引等......

不仅繁琐、耗时,而且...再过五年,将需要再次发生......

它是如此接近值得如此大量的工作,但重点是......这不会是我们最后一次需要这种能力,因为我们的系统将继续增长、扩展,并在需求/设计添加的驱动下以奇怪的顺序获取字段。

大多数开发人员从服务于单个公司或非常特定的硬盒市场的单一系统的角度进行思考。

“现成的”但在其市场空间中显着进步的设计师和开发领导者总是不得不一次又一次地处理这个问题......如果有人有一个创造性的解决方案,他们会喜欢一个创造性的解决方案。这可以轻松地为我的公司每周节省十几个小时,只需滚动或记住“那个”字段在源数据表中的位置......

如果我理解你的问题,你想影响返回的第一、第二、第三等列 现存的 查询,对吗?

如果你所有的查询都是用 SELECT * FROM TABLE - 然后它们将按照 SQL 中的布局显示在输出中。

如果您的查询是这样写的 SELECT Field1, Field2 FROM TABLE - 那么它们在 SQL 中的排列顺序并不重要。

当 Management Studio 执行此操作时,它会创建一个临时表,复制所有内容,删除原始表并重命名临时表。没有简单的等效 T-SQL 语句。

如果您不喜欢这样做,您可以随时创建一个表视图,其中的列按您想要的顺序排列并使用它?

编辑:被打了!

有一种方法,但它只是暂时用于查询本身。例如,

假设您有 5 张桌子。表称为 T_Testing

名字、姓氏、电话号码、电子邮件和 Member_ID

您希望它列出他们的 ID,然后是姓氏,然后是名字,然后是电话号码,然后是电子邮件地址。

您可以按照选择进行操作。

Select Member_ID, LastName, FirstName, PhoneNumber, Email
From T_Testing

除此之外,如果您出于某种原因只想将姓氏显示在名字之前,您也可以按以下方式执行此操作:

Select LastName, *
From T_Testing

您唯一想要确保做的事情是,如果您要使用Where或OrderBy,则OrderBy或Where函数需要表示为Table.Column

例子:

Select LastName, *
From T_Testing
Order By T_Testing.LastName Desc

我希望这有帮助,我想通了,因为我需要自己做这件事。

  1. 将现有表编写到查询窗口中。
  2. 针对测试数据库运行此脚本(删除 Use 语句)
  3. 使用 SSMS 进行您需要的列更改
  4. 单击“生成更改脚本”(默认情况下,在纽扣栏上剩下的大多数和bottommost图标)
  5. 针对您的真实表使用此脚本

该脚本真正要做的就是创建具有所需列顺序的第二个表,将所有数据复制到其中,删除原始表,然后重命名辅助表以取代其位置。如果您需要部署脚本,这确实可以节省您自己编写的时间。

可以使用 SQL 直接修改系统表来完成。例如,看这里:

更改表 - 在两者之间添加新列

但是,我不建议使用系统表,除非绝对必要。

如果不重新创建整个表,则无法更改列的顺序。如果您只有几个数据库实例,则可以使用 SSMS(选择表并单击“设计”)。

如果您有太多实例无法手动处理,您应该尝试以下脚本:https://github.com/Epaminaidos/reorder-columns

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top