我可以在逻辑上重新排列表中的列?

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

我不想混淆在磁盘上的列的物理布局,但我想在逻辑上将列组合在一起,以便像SQL Server Management Studio这样的工具以方便的方式列出表格的内容。

我知道我可以通过SQLpipe理工作室通过进入他们的“devise”模式的表和拖动列的顺序来做到这一点,但我希望能够做到原始SQL,使我可以执行sorting从命令行脚本。

您不能以编程方式(以安全的方式)执行此操作,而无需创build新表。

提交重新sorting时,Enterprise Manager执行的操作是创build一个新表,移动数据,然后删除旧表并将新表重命名为现有名称。

如果你希望你的列在特定的顺序/分组中,而不改变他们的物理顺序,你可以创build一个视图,可以是任何你想要的。

我认为这里的每个人都缺less的是,虽然不是每个人都必须面对在全国乃至全世界安装的同一个软件系统的10,20或1000个实例……那些devise商业销售软件的人也是这样做的。 因此,随着时间的推移,我们扩展了系统,通过添加字段扩展表格,因为需要新的function,并且这些字段被确定属于现有的表格,因此,十多年的扩展,增长,添加领域等等到表……然后不得不从devise工作,以支持,有时挖掘到原始数据/故障排除debugging新的function错误….这是令人难以置信的加重,没有你想要的主要信息在第一批领域内看到,当你可能有30-40-50甚至90场的桌子,是在严格规范的数据库。

我经常希望我能做到这一点,正是因为这个原因。 但是,并没有完全按照SQL做什么,按照我想要的方式为新表创build一个创build脚本,编写Insert,然后从现有表中删除所有现有的约束,关系,键,索引等等等等,并重命名“新”表回到旧名称,然后阅读所有这些键,关系,索引等等。

不仅繁琐,费时,而且……在五年之内,将需要再次发生….

这是非常值得的工作,但重点是…这不会是我们最后一次需要这种能力,因为我们的系统将继续增长,扩大,并得到一个由需要/devise增加。

大多数开发人员从一个单一的系统angular度考虑服务单个公司或非常具体的硬盘盒市场。

他们的市场空间中的“现成的”,但显着的进步的devise师和发展领导者将永远必须处理这个问题,一遍又一遍地……如果有人有一个创造性的解决scheme,将爱。 这可以很容易地保存我的公司每周十几个小时,只是不必滚动,或记住“该”字段在源数据表中的位置….

如果我理解你的问题,你想要影响现有查询中返回第一,第二,第三等的列,对不对?

如果你所有的查询都是用SELECT * FROM TABLE编写的,那么它们将在输出中显示出来,因为它们是用SQL编写的。 如果您的查询是使用SELECT Field1,Field2 FROM TABLE编写的 – 那么它们在SQL中放置的顺序并不重要。

当Management Studio执行此操作时,它将创build一个临时表,将所有内容复制到一起,然后删除原始表并重命名该临时表。 没有简单的等价的T-SQL语句。

如果你不喜欢这样做,你总是可以按照你想要的顺序创build一个表的视图,并使用它?

编辑:殴打!

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

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

但是,我不build议玩系统表,除非是绝对必要的。

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

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

名字,姓氏,电话号码,电子邮件和会员ID

你想要它列出他们的ID,然后姓氏,然后名字,然后电话,然后电子邮件。

你可以按照Select来做。

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

除此之外,如果因为某种原因只想让名字显示在名字之前,那么也可以这样做:

 Select LastName, * From T_Testing 

你唯一想要确定的是,OrderBy或Where函数需要表示为Table.Column,如果你打算使用Where或OrderBy

例:

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

我希望这有帮助,我想到了,因为我需要自己做这个。

  1. 将现有的表脚本编写到查询窗口。
  2. 对testing数据库运行此脚本(删除使用语句)
  3. 使用SSMS来改变你需要的列
  4. 点击“生成更改脚本”(默认情况下,button栏上最左侧和最下方的图标)
  5. 对你的真实表使用这个脚本

所有的脚本真正做的是创build第二个表的列表所需的列顺序,将所有的数据复制到它,删除原来的表,然后重命名辅助表取代它。 如果你想要一个部署脚本,这可以节省你自己写的东西。

无法重新创build整个表格,而无法更改列的顺序。 如果只有几个数据库实例,可以使用SSMS(select表格并单击“devise”)。

如果你有一个手动过程的实例太多,你应该尝试这个脚本: https : //github.com/Epaminaidos/reorder-columns