2017-10-15 77 views

回答

3

假設你保持列相同的「類型」,所以你的意思是:

alter table alter column col varchar(max); -- for some varchar 
alter table alter column col bigint;  -- where the column is a smaller int 

(這比OP的問題更普遍;我在標題中發現的問題具體是指字符數據)

然後就不太可能有「未來」的問題。任何現有的數據都應該適合「更大」的數據類型。

當您進行更改時,SQL Server可能需要重新構建數據庫頁面,因此可能需要一些時間。但是,這是一個短期的考慮,而不是一個長期的考慮。那麼,有點短期。重組可能會導致碎片化 - 但這種情況在varchar()更改時不太可能發生。

如果任何列用於外鍵引用,您可能會發現無法進行更改 - 除非您刪除外鍵約束並重建它。

顯然,數據可能會佔用更多的空間在磁盤上和存儲器(儘管這是用於varchar()nvarchar()次要的考慮,因爲這些都是可變長度)。

額外的空間可以稍微增加查詢的運行時間。存在邊界最壞的情況,其中增加的空間意味着表格的數據頁面不適合內存,並且您可能會遇到某些查詢的顛簸情況。然而,這是不太可能的,並且無論如何會發生更多的行或頁數較少的填充。

這也會影響使用這些列的索引。

相關問題