Sql-Server-2008-R2
SSDT 表列順序
我意識到 SQLPACKAGE.EXE 的行為會根據對錶模式所做的更改而改變:
- 在表格末尾添加新列:“表格已更改”
- 從表中刪除列:“表已更改”
- 在現有列之間添加一列或只是更改它們的順序:“表的重新創建已開始”
(我自己做了翻譯,它們可能不准確但相似)。
第 3 步在發布過程中需要很長時間。我想知道為什麼以及到底發生了什麼。我懷疑表結構是完全重新創建的。我不想要這個,我基本上不會非常關心不同目標系統中的列順序。有什麼辦法可以防止這個耗時的過程嗎?
編輯:
同時我發現很多人都在為同樣的問題而苦苦掙扎。SSDT 沒有任何選項來忽略目標表的列順序。這使得它重新排列如上所述的所有數據。這既費時又完全沒用,但如果您想使用 SSDT,則別無選擇。
請在此處查看並投票:
你是對的,“重新排列”列順序的唯一方法是創建一個具有新結構的表並將舊數據推入其中,刪除舊表,然後重命名新表(或該表的某些變體) . 它需要復製表中的所有數據以及一些刪除和重命名。
有什麼辦法可以防止這個耗時的過程嗎?
肯定有!**停止關心列順序。**如果這很重要,請願意付出代價,或者在設計上花費更多時間,這樣您就不會在獲得“正確”的列順序之前多次重新部署同一個表。
如果您使用表設計器並更改列的順序,SSMS 會做完全相同的事情——它將創建一個新表、複製所有數據、刪除舊表並重命名新表。這並不便宜 - 純粹的物理數據移動需要時間,並且必須完全記錄該移動。
您還會注意到,沒有允許您指定新列的物理位置的 T-SQL / DDL 命令;這是因為 SQL Server 在不重建的情況下不支持它。
無論如何,這並不重要。您的應用程序可以被編碼為以它想要的任何順序請求列,而不管底層物理實現如何。如果這是為懶惰的
SELECT *
抽查員準備的,請為他們創建一個視圖。