2010-12-09 146 views
15

我有一個FKs的老桌子。我想添加一個新列。我想讓這個新的專欄成爲我的主要關鍵。所以我想我可以將該列作爲第一個插入,或者將其插入到我的表格末尾,然後重新排列我的列。爲什麼我不能重新排列我的SQL Server列?

但SQL Server Management Studio不允許我這樣做。我知道我不能那樣做,並且該列順序在SQL中幾乎完全不相關。

我想知道的是,怎麼來......我的意思是,我可以放下一列......和添加一個新的不一樣嗎?

我只是想知道發生了什麼。我也很難找到相關的文檔。如果有人能指出我的好方向。

+1

你能告訴我們你使用的是什麼版本的SQL Server,哪些是你得到確切的錯誤信息是什麼?我猜測它可能是一個設置,不會讓你做出需要重新創建表格的更改。 – Ryan 2010-12-09 19:41:20

+0

對不起,耽誤了聖誕派對,耽誤了我的工作。我正在使用MSSQL Server 2008 R2(管理工作室)。該錯誤信息是: 「保存更改不允許你所做的更改要求下表被刪除並重新創建你要麼做,不能重新創建更改表或啓用。選項防止保存需要重新創建表的更改。「的 – 2010-12-13 18:44:26

+0

可能重複[我可以重新排列邏輯表中的列?(http://stackoverflow.com/questions/1610/can-i-logically-reorder-columns-in-a-table) – bummi 2014-05-15 10:47:35

回答

5

你可能會喜歡的答案this question

至於爲什麼你不能重新排序的列(除了SSMS-具體公佈答案),我不知道你會發現一個典型的答案,比SQL標準另一方含有做任何編程語法所以 - 重新定義表格模式(包括其列的順序)的唯一方法是刪除表格並重新創建它。因此,任何提供列「重新排序」的管理應用程序都很可能會在幕後進行(例如SSMS的設計視圖,如鏈接問題所指出的那樣)。

有人用SQL規範的較深的造詣會反駁這一點,如果有不提供重新排序列機制爲標準DDL的一部分明確的原因,但我只能猜想,因爲查詢定義的順序無論如何它們的結果集中有列,而DBMS根據它們各自的實現來控制物理存儲,邏輯列順序本質上是無意義的,並不保證這種機制。

+4

列順序在任何SQL語句的上下文中都沒有提供任何值的事實對我來說是規範的 - 您可以按照您的任何順序選擇您喜歡的任何列。 – 2010-12-09 19:50:05

+0

同意。我想我試圖通過指出可能或不可能有更明確的理由來限定我的陳述。但我同意我認爲不需要有一個。 – 2010-12-09 19:58:17

6

重新排序的列是基本相同的改造表,這是解決辦法,如果需要改變娛樂禁用:

SELECT (fields in DESIRED order) 
INTO MyNewTable 
FROM OldTable 
1

如果我懷疑是正確的,您打開一個設置,您需要關閉以允許需要重新創建表才能保存的更改。

打開SQL Management Studio並使用菜單轉到工具 - >選項

在左側的選項菜單中選擇設計師

在表選項在右窗格中確保旁邊的複選框設置爲「防止保存需要重新創建表的更改」的設置未被選中。

確認完成後,嘗試重新排列列。

22

絕對可以。在SQL Server Management Studio中取消選中此選項:
工具>選項>設計器>防止保存需要表格娛樂的更改。

Options dialog

0

我想知道的是什麼,是怎麼來的......我的意思是,我可以刪除一列...是不是同樣的事情如添加一個新的?

刪除列是基於列名而不是序號位置(第一/第二/第三/ etc列)。添加列總是附加到列列表的末尾。這強化了列的順序與SQL操作以外的數據完全無關。我不知道你怎麼看無論是其相似?

沒有SQL數據庫我知道在一個特定的順序插入支持列到現有的表。 PHPMyAdmin提供了功能,但是在此基礎上,函數創建了一個具有所需列順序的新表,將數據從舊錶複製到新表,最後刪除/刪除舊錶。

列順序不提供任何好處操作...

0

你不想這樣做,除非該表沒有任何數據,而不是生產!原因是它必須將現有記錄帶出臨時表,刪除舊錶,重命名臨時表。這對生產中的現有表格來說是一件非常糟糕的事情。無論如何,依靠查詢中的列順序是愚蠢的,所以這是完全不必要的任務。這是可以導致巨大的痛苦,從字面上沒有收益的東西。即使找到解決方法,也不要走這條路。

相關問題