sql server -我可以对表中的列进行逻辑重新排序吗?

Translate

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

我不想弄乱磁盘上列的物理布局,但是我想在可能的情况下在逻辑上将列分组在一起,以便像SQL Server Management Studio这样的工具以一种方便的方式列出表的内容。

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

This question and all comments follow the "Attribution Required."

所有的回答

Translate

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

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

如果希望按特定的顺序/分组排列列而不改变其物理顺序,则可以创建一个所需的视图。

来源
Translate

我认为这里每个人都缺少的是,尽管不是每个人都必须处理在整个国家和世界范围内安装的同一软件系统的10、20或1000个实例……设计商业销售软件的我们中的每个人都必须这样做。结果,随着时间的推移,我们扩展了系统,通过在需要新功能时添加字段来扩展表,并且在识别出这些字段确实属于现有表之后,因此进行了十多年的扩展,增长,添加字段等到表格...。然后不得不使用这些表格,从设计到支持,有时还需要挖掘原始数据/进行故障排除以调试新的功能错误....令人难以置信的是,没有所需的主要信息请参阅第一个字段中的字段,这时您可能有一个包含30-40-50甚至90个字段的表,而在严格归一化的数据库中则是。

出于这个确切的原因,我经常希望我可以这样做。但是缺少精确执行SQL的功能,按照我想要的方式为新表构建创建脚本,向其中写入插入,然后从现有表中删除所有现有约束,关系,键,索引等,然后重命名将“新”表恢复为旧名称,然后读取所有这些键,关系,索引等...。

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

它非常值得进行大量工作,但是重点是……这将不是我们最后一次需要这种能力,因为我们的系统将继续增长,扩展,并获得由需要/设计增加。

大多数开发人员从为单个公司或非常特定的硬盒市场提供服务的单一系统角度考虑。

市场上那些“现成的”但有进取心的设计师和开发领导者将总是不得不解决这个问题,一遍又一遍.....如果有人愿意,我会喜欢一种创造性的解决方案。这可以轻松地每周为我的公司节省十几个小时,而不必滚动或记住源数据表中“那个”字段的位置。

来源
Translate

如果我理解您的问题,那么您想影响在第一,第二,第三列中返回哪些列现有查询,对不对?

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

如果您的查询是用SELECT Field1, Field2 FROM TABLE-那么它们在SQL中的排列顺序无关紧要。

来源
Translate

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

如果您不愿意这样做,则始终可以按所需顺序创建带有列的表格视图,并使用该视图?

编辑:殴打!

来源
Translate

有一种方法,但这只是查询本身的暂时方法。例如,

假设您有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

我希望这对我有所帮助,因为我需要自己做。

来源
Translate
  1. 将现有表编写脚本到查询窗口。
  2. 针对测试数据库运行此脚本(删除Use语句)
  3. 使用SSMS进行所需的列更改
  4. 单击生成更改脚本(默认情况下,按钮栏上的最左侧和最底部的图标)
  5. 针对您的真实表使用此脚本

该脚本真正要做的就是创建具有所需列顺序的第二张表,将所有数据复制到其中,删除原始表,然后重命名第二张表以代替它。尽管确实需要部署脚本,但这确实节省了您自己编写代码的麻烦。

来源
Translate

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

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

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

来源
Translate

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

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

来源