2015-10-13 66 views
1

我剛剛在SQL Server Express中遇到了10GB的數據庫限制,並且希望刪除不必要的列,並將其他列轉換爲不太重的數據類型。我有29列,只有50M行很害羞。在這29箇中,有20個是漂浮物,其中只有10個對我很有用。我可以完全放棄浮動列中的10個,仍然擁有我需要的所有信息。在其餘6列中,2是位,2是int(複合鍵需要),5是int,但可以是tinyint。在SQL Server Express 2014中轉換列數據類型時的做法是什麼?

如何確保在將這5列的數據類型更改爲tinyint之前,事情會正確轉換? SSMS警告說,從Design開始的時候會出現潛在的數據丟失問題,所以我想確保事情沒有問題,然後再繼續操作Alter Table語句。

是化繁爲簡:

SELECT [ExperimentID],[CycleCount] --My compound key 
FROM [dbo].[Simulations] 
WHERE (parameter1 < 0 OR parameter1 > 255) OR (parameter2 < 0 OR parameter2 > 255) OR (other search conditions) 

還是有更好的方式來驗證這些東西呢?

另外,對不起,數據庫沒有正常規範化,我建議不要由同事規範化,以幫助以後的數據分析。

+0

爲什麼漂浮?你需要的數字真的很不精確嗎?對於tinyint轉換,您可以檢查MAX(ColumnName)以查看它們是否適合tinyint。我可能會不同意你的同事關於正常化。表結構設計應該由開發人員未來的容易程度來決定。它應該始終是正確地存儲數據,但這完全是另一個話題。 –

+0

有些事情要記住,這只是一種方式在路上踢球。如果您要繼續添加行,您將再次達到10GB的限制。那麼你打算怎麼做? –

+0

這個特定的數據庫存儲了一些模擬結果。 56000/90000已經運行了,我認爲通過刪除大部分浮點數並在我可以的情況下將整數作爲tinyint輸入,數據庫將遠低於10GB。浮點數是需要的,因爲我們需要至少6位數的精度超過小數點。 – ijustlovemath

回答

0

無論你想改變,你可以列的類型轉換,選擇它,以確保一切正常的話:

SELECT CAST(Column_Name as tinyint), * 
FROM [dbo].[Simulations] 

如果有這將引發異常INT值。

如果您嘗試縮短字符串(如將varchar(1000)更改爲varchar(100)),則會出現數據將被截斷的消息。

+0

我還建議你檢查文件大小,因爲你的數據庫的大部分可能是日誌文件,我認爲這對你來說是無用的。閱讀更多 - https://msdn.microsoft.com/en-us/library/ms189272.aspx - 您需要將恢復模式更改爲簡單,然後將日誌文件縮小爲0. – GSazheniuk

+0

整個數據庫的日誌爲20MB ,所以我不認爲這是問題。我喜歡將它用於「以防萬一」 – ijustlovemath

+0

然後是的,20MB沒有意義,所以最好保留它,儘管批量更新所有數據以更改列的類型後,它可能會立即變大。 – GSazheniuk

相關問題