回答
您可以使用以下命令輕鬆完成此操作。任何0值都會變成0(BIT = false),其他任何值都會變成1(BIT = true)。
ALTER TABLE dbo.YourTable
ALTER COLUMN YourColumnName BIT
另一種選擇是創建BIT
類型的新列中,從舊列填充它,而一旦大功告成,刪除舊列,並重新命名新一箇舊名稱。這樣,如果轉換過程中出現問題,您可以隨時返回,因爲您仍然擁有所有數據。
爲什麼你認爲你會丟失數據?只需進入Management Studio並更改數據類型即可。如果現有的值可以轉換爲布爾(位),它會這樣做。換句話說,如果「1」映射爲true,並且「0」在原始字段中映射爲false,那麼您將會很好。
如果你有表中的數據,這將無法正常工作。當您嘗試更改列類型時,SMS聲稱它需要首先刪除表......這當然是不正確的,因爲即使對於非NULL字段,ALTER TABLE ... ALTER COLUMN命令也可以正常工作。這就是爲什麼他們認爲他們可能會丟失數據。 –
@ TonyO'Hagan事實並非如此。您可以關閉該警告,並且它可以在現有數據下正常工作。另見http://stackoverflow.com/questions/2947865/sql-server-2008-management-studio-drop-tables-warning –
好酷!不知道。只是試圖投票給你(後退),但是,除非你編輯你的答案,否則是阻止我。也許是一個小小的改變,我可以這樣做;)。 –
ALTER TABLE tablename
ALTER COLUMN coulumnname columndatatype(size)
注意:如果有大小的列,只需寫入大小即可。
在緊湊版將自動採取大小日期時間數據類型,即(8),所以沒有必要設置字段的大小和用於該操作產生錯誤...
如果它是一個有效的變化。
您可以更改屬性。
工具 - >選項 - >設計人員 - >表和數據庫設計人員 - >取消選中 - >禁止保存需要重新創建表的更改。
現在,您可以輕鬆地更改列名稱而無需重新創建表或丟失您的記錄。
在任何情況下,您都不應該使用GUI進行表格更改。它將完全重新創建表格而不是使用Alter表格,如果您取消選中並且表格很大,則會導致問題。此外,您應該對源代碼管理腳本中的表進行所有更改。 – HLGEM
仔細查看該選項 - 它會關閉一項安全措施,防止GUI丟棄表格。您將不會丟失數據,因爲GUI將重新創建表,但在服務器上它將被複制/放置。所以,如果表中有很多數據,它將導致一個非常大的操作。另外,我_think_(不肯定)它發生在單個事務中,因此您可以填寫您的事務日誌。 – JMarsch
我想我想對我以前的評論添加一點澄清。如果你只是在你的開發機器上做這個,你可能沒問題。但我不會建議在生產數據庫上使用這種方法 - 特別是如果它是關鍵任務的話。 – JMarsch
更換數據類型而不會丟失數據
alter table tablename modify columnn newdatatype(size);
在任何情況下,您都不應該使用GUI進行表格更改。它將完全重新創建表格而不是使用Alter表格,如果您取消選中並且表格很大,則會導致問題。此外,您應該對源代碼管理腳本中的表進行所有更改。 – HLGEM
我可以修改表中字段的數據類型,這些下面的查詢:並在Oracle數據庫,
ALTER TABLE table_name
MODIFY column_name datatype;
不在SQl服務器中 – HLGEM
如果使用T-SQL(MSSQL);你應該試試這個腳本:
ALTER TABLE [Employee] ALTER COLUMN [Salary] NUMERIC(22,5)
如果你使用MySQL;你應該試試這個腳本:
ALTER TABLE [Employee] MODIFY COLUMN [Salary] NUMERIC(22,5)
如果你使用Oracle;你應該試試這個腳本:
- 1. 在不丟失數據的情況下更改列類型
- 2. 如何在不丟失數據的情況下更改我的表的標識列數據類型
- 3. 如何在不丟失數據的情況下更改模型類名稱?
- 4. 如何在不丟失數據的情況下更改核心數據SQLite數據庫的結構
- 5. SQLite3:如何在不丟失數據的情況下修改fileds的類型
- 6. Django - 在不丟失數據的情況下將數據添加到數據庫
- 7. 如何在不丟失數據的情況下重命名MySQL數據庫?
- 8. 如何在不丟失數據的情況下重命名數據庫?
- 9. 如何在不丟失新數據的情況下回滾數據庫部署?
- 10. 如何在不丟失未刪除數據的情況下快照數據庫?
- 11. 在不更改數據庫的情況下更改模型?
- 12. 如何在不丟失表格的情況下更新數據庫模式
- 13. 如何在不丟失形狀的情況下過濾數據?
- 14. 如何在不丟失數據的情況下刪除分區?
- 15. 如何在不丟失數據的情況下切換UIViews?
- 16. 如何在不丟失舊數據的情況下在sqlite數據庫上添加數據?
- 17. 如何更改德比數據庫中列的數據類型?
- 18. 如何更改數據庫而不丟失數據?
- 19. 在不修改舊數據的情況下更新數據
- 20. 如何在數據庫值更改的情況下更新ListView?
- 21. 在Liferay中更改數據庫並丟失任何數據
- 22. 在數據已經存在的情況下,更改列的數據類型是否會破壞數據?
- 23. SQL Server 2008:在不丟失數據庫的情況下清空整個數據庫的最有效方法
- 24. 如何在不丟失原始數據的情況下更新數據庫模式
- 25. MS SQL數據庫模式更改無數據丟失
- 26. 如何在不刪除數據庫的情況下更改模型?
- 27. Laravel 5.2如何在不丟失數據的情況下更新遷移
- 28. 在不丟失當前數據的情況下升級Cassandra
- 29. 如何在沒有數據庫的情況下收集數據
- 30. 如何在數據庫爲空的情況下添加數據?
你是否嘗試過創建一個新的位列,將舊列的值複製到新列中,刪除舊列並重命名新列?所有這些在交易中,當然是回滾問題。 –
你說:「我只是意識到,我可以改變從int到bool列之一的類型」沒有布爾數據類型。雖然有一點。你問你**如何做到這一點(因爲迄今爲止的2個答案已經涵蓋)。或者是你的問題「我剛剛意識到這是可能的 - ** SQL Server **如何做到這一點?」 –
可能的重複[如何更改MS SQL中列的數據類型?](http://stackoverflow.com/questions/626899/how-do-you-change-the-datatype-of-a-column- in-ms-sql) – nandeesh