回答
您可以使用以下命令轻松完成此操作。任何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