如果我在Microsoft SQL Server中的表中添加一列,我可以在查询中以逻辑方式控制列的显示位置吗?
我不想弄乱磁盘上列的物理布局,但我希望在可能的情况下将列逻辑分组在一起,以便SQL Server Management Studio等工具以方便的方式列出表的内容。 / p>
我知道我可以通过SQL Management Studio执行此操作,进入表的“设计”模式并拖动列的顺序,但我希望能够在原始SQL中执行此操作以便我可以执行从命令行编写脚本的命令。
答案 0 :(得分:71)
如果不创建新表,则无法以编程方式(以安全的方式)执行此操作。
提交重新排序时,企业管理器的作用是创建新表,移动数据,然后删除旧表,并将新表重命名为现有名称。
如果您希望您的列按特定顺序/分组而不改变其物理顺序,则可以创建一个可以是您想要的视图。
答案 1 :(得分:41)
我认为每个人都缺少的是,虽然不是每个人都必须处理在全国和全世界安装的相同软件系统的10个,20个或1000个实例...我们这些设计商业销售软件的人所以。因此,我们随着时间的推移扩展系统,通过在需要新功能时添加字段来扩展表,并且因为这些字段确定属于现有表,因此,十多年的扩展,增长,添加字段等到桌子....然后不得不从设计,支持,有时深入研究原始数据/故障排除以调试新的功能错误...这些表...没有你想要的主要信息令人难以置信的加重在第一批字段中看到,当你可能有30-40-50甚至90个字段的表,而在严格规范化的数据库中则是。
出于这个原因,我经常希望能做到这一点。但是不能完全按照SQL做的那样,按照我想要的方式为新表构建一个Create Script,将Insert写入它,然后从现有表中删除所有现有的约束,关系,键,索引等等并重命名“新”表回到旧名称,然后读取所有那些键,关系,索引等等....
不仅乏味,耗时,而且......再过五年,还需要再次发生......
它非常接近于大量的工作,但重点是......它不会是我们最后一次需要这种能力,因为我们的系统将继续增长,扩展,并且可以获得很大的成功。由需要/设计添加驱动的命令。
大多数开发人员从单一系统角度考虑为单个公司或特定硬盒市场提供服务。
“现成的”,但在他们的市场空间中显着进步的设计师和发展领导者将始终不得不一次又一次地处理这个问题.....如果任何人有一个,他们会喜欢创造性的解决方案。这可以很容易地每周节省我的公司十几个小时,只需要不必滚动,或者记住源数据表中“那个”字段的位置....
答案 2 :(得分:5)
如果我理解了您的问题,您希望影响现有查询中返回的第一,第二,第三等列,对吧?
如果您的所有查询都是使用SELECT * FROM TABLE
编写的 - 那么它们将显示在输出中,因为它们是在SQL中布局的。
如果您的查询是用SELECT Field1, Field2 FROM TABLE
编写的 - 那么它们在SQL中的排列顺序无关紧要。
答案 3 :(得分:3)
当Management Studio执行此操作时,它会创建一个临时表,复制所有内容,删除原始表并重命名临时表。没有简单的等效T-SQL语句。
如果你不喜欢这样做,你总是可以按照你想要的顺序创建一个表格视图并使用它吗?
编辑:殴打!
答案 4 :(得分:1)
有一种方法,但它只是暂时用于查询本身。例如,
假设您有5张桌子。
表称为T_Testing
FirstName,LastName,PhoneNumber,Email和Member_ID
您希望它列出他们的ID,然后是姓氏,然后是FirstName,然后是电话,然后是电子邮件。
您可以按照选择进行操作。
Select Member_ID, LastName, FirstName, PhoneNumber, Email
From T_Testing
除此之外,如果您因为某种原因只想让姓氏在名字前显示,您也可以按如下方式进行:
Select LastName, *
From T_Testing
你唯一想确定的是,如果你打算使用Where或OrderBy,则需要将OrderBy或Where Function表示为Table.Column
示例:
Select LastName, *
From T_Testing
Order By T_Testing.LastName Desc
我希望这会有所帮助,我想出来因为我需要自己做这件事。
答案 5 :(得分:1)
所有脚本确实创建了第二个包含所需列顺序的表表,将所有数据复制到其中,删除原始表,然后重命名辅助表以取代它。如果你想要一个部署脚本,这确实可以让你自己编写它。
答案 6 :(得分:0)
答案 7 :(得分:0)
如果不重新创建整个表,则无法更改列的顺序。如果您只有几个数据库实例,则可以使用SSMS(选择表并单击" design")。
如果手动进程的实例太多,您应该尝试以下脚本: https://github.com/Epaminaidos/reorder-columns