为什么我不能重新排序我的SQL Server列?

Séb*_*her 16 sql sql-server

我有一张带有FK的旧桌子.我想添加一个新列.我想把这个新列作为主键.所以我认为我可以插入该列作为第一个列,或者将其插入到我的表的末尾,然后重新排序我的列.

但是SQL Server Management Studio不允许我这样做.我知道我不能这样做,并且在SQL中,列顺序几乎完全不相关.

我想知道的是,怎么来......我的意思是,我可以放一个专栏...是不是和添加新专栏一样?

我只是想了解发生了什么.我也很难找到相关的文档.如果有人能指出我的好方向.

Jah*_*ine 23

绝对可以.在SQL Server Management Studio中取消选中此选项:
工具>选项>设计器>防止保存需要表重新创建的更改.

选项对话框

  • 希望它不用说,但无论如何都不好说.这可以杀死表.如果您去生产数据库附近的任何地方,我建议您在进行更改后立即重新打开该标志! (7认同)

JNK*_*JNK 7

重新排序列与重新生成表基本相同,如果禁用了需要重新创建的更改,则解决方法是:

SELECT (fields in DESIRED order)
INTO MyNewTable
FROM OldTable
Run Code Online (Sandbox Code Playgroud)


Dan*_*n J 5

您可能对此问题的答案感兴趣.

至于为什么你不能重新排序列(除了发布的SSMS特定答案),我不确定你会找到一个规范的答案,除了SQL标准不包含这样做的程序语法 - 唯一的方法是重新定义表的模式(包括其列的顺序)是删除表并重新创建它.因此,任何提供"重新排序"列的管理应用程序最有可能在幕后进行(例如SSMS的设计视图,如链接问题中所指出的).

有人用SQL规范的较深的造诣会反驳这一点,如果有不提供重新排序列机制为标准DDL的一部分明确的原因,但我只能猜想,因为查询其结果集定义列的顺序呢并且DBMS根据其各自的实现来控制物理存储,逻辑列顺序基本上没有意义,并且不保证这样的机制.

  • 列顺序在任何SQL语句的上下文中都没有提供任何值的事实对我来说是规范的 - 你可以按照你想要的顺序选择你喜欢的列. (4认同)