我有一张带有FK的旧桌子.我想添加一个新列.我想把这个新列作为主键.所以我认为我可以插入该列作为第一个列,或者将其插入到我的表的末尾,然后重新排序我的列.
但是SQL Server Management Studio不允许我这样做.我知道我不能这样做,并且在SQL中,列顺序几乎完全不相关.
我想知道的是,怎么来......我的意思是,我可以放一个专栏...是不是和添加新专栏一样?
我只是想了解发生了什么.我也很难找到相关的文档.如果有人能指出我的好方向.
Jah*_*ine 23
绝对可以.在SQL Server Management Studio中取消选中此选项:
工具>选项>设计器>防止保存需要表重新创建的更改.
重新排序列与重新生成表基本相同,如果禁用了需要重新创建的更改,则解决方法是:
SELECT (fields in DESIRED order)
INTO MyNewTable
FROM OldTable
Run Code Online (Sandbox Code Playgroud)
您可能对此问题的答案感兴趣.
至于为什么你不能重新排序列(除了发布的SSMS特定答案),我不确定你会找到一个规范的答案,除了SQL标准不包含这样做的程序语法 - 唯一的方法是重新定义表的模式(包括其列的顺序)是删除表并重新创建它.因此,任何提供"重新排序"列的管理应用程序最有可能在幕后进行(例如SSMS的设计视图,如链接问题中所指出的).
有人用SQL规范的较深的造诣会反驳这一点,如果有是不提供重新排序列机制为标准DDL的一部分明确的原因,但我只能猜想,因为查询其结果集定义列的顺序呢并且DBMS根据其各自的实现来控制物理存储,逻辑列顺序基本上没有意义,并且不保证这样的机制.