如何在不丢失数据的情况下更改SQL数据库中的列数据类型

Iva*_*nov 192 sql-server alter sql-server-2008

我有SQL Server数据库,我才意识到我可以将其中一个列的类型更改intbool.

如何在不丢失已输入该表的数据的情况下执行此操作?

mar*_*c_s 319

您可以使用以下命令轻松完成此操作.任何值0都将变为0(BIT = false),其他任何值都将变为1(BIT = true).

ALTER TABLE dbo.YourTable
   ALTER COLUMN YourColumnName BIT
Run Code Online (Sandbox Code Playgroud)

另一个选项是创建一个新类型BIT的列,从旧列填充它,一旦完成,删除旧列并将新列重命名为旧名称.这样,如果转换过程中的某些内容出错,您可以随时返回,因为您仍然拥有所有数据.

  • 换句话说:`NULL`保持为"NULL","0"变为"False",非零值(1,-1,1999,-987 ......)变为"True". (9认同)
  • 永远不要从GUI进行这样的更改。始终通过这样的脚本来实现。GUI将删除并重新创建表,这将花费大量时间。如果桌子很大并且在生产中,这可能是灾难性的。另外,所有表更改都应具有与所有其他代码一样在源代码管理中的脚本。 (2认同)

小智 20

ALTER TABLE tablename
ALTER COLUMN columnname columndatatype(size)
Run Code Online (Sandbox Code Playgroud)

注意:如果有列的大小,也只需写入大小.


小智 19

如果是有效的更改.

你可以改变财产.

工具 - >选项 - >设计器 - >表和数据库设计者 - >取消选中 - >防止保存需要重新创建表的更改.

现在,您可以轻松更改列名,而无需重新创建表或丢失记录.

  • 在任何情况下,您都不应该使用GUI进行表格更改.它将完全重新创建表而不是使用Alter表,如果您取消选中此表并且表很大,这将导致问题.此外,您应该在源代码管理中的脚本中对表进行所有更改. (5认同)

小智 9

如果你使用 T-SQL(MSSQL); 你应该试试这个脚本:

ALTER TABLE [Employee] ALTER COLUMN [Salary] NUMERIC(22,5)
Run Code Online (Sandbox Code Playgroud)

如果你使用 MySQL;你应该试试这个脚本:

ALTER TABLE [Employee] MODIFY COLUMN [Salary] NUMERIC(22,5)
Run Code Online (Sandbox Code Playgroud)

如果您使用 Oracle;你应该试试这个脚本:

ALTER TABLE [Employee] MODIFY [Salary] NUMERIC(22,5)
Run Code Online (Sandbox Code Playgroud)


Phi*_*ert 8

为什么你认为你会丢失数据?只需进入Management Studio并更改数据类型即可.如果现有值可以转换为bool(bit),它就会这样做.换句话说,如果"1"映射到true而"0"在原始字段中映射为false,那么你会没事的.