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

时间:2011-02-27 21:14:23

标签: sql-server sql-server-2008 alter

我有SQL Server数据库,我刚刚意识到我可以将其中一列的类型从int更改为bool

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

11 个答案:

答案 0 :(得分:301)

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

ALTER TABLE dbo.YourTable
   ALTER COLUMN YourColumnName BIT

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

答案 1 :(得分:17)

如果是有效的更改。

你可以改变财产。

  

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

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

答案 2 :(得分:15)

ALTER TABLE tablename
ALTER COLUMN columnname columndatatype(size)

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

答案 3 :(得分:8)

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

答案 4 :(得分:4)

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

ALTER TABLE [Employee] ALTER COLUMN [Salary] NUMERIC(22,5)

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

ALTER TABLE [Employee] MODIFY COLUMN [Salary] NUMERIC(22,5)

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

ALTER TABLE [Employee] MODIFY [Salary] NUMERIC(22,5)

答案 5 :(得分:3)

转到工具 - 选项 - 设计人员 - 表和数据库设计人员并取消选中防止保存选项enter image description here

答案 6 :(得分:2)

使用列的检查类型更改列数据类型:

IF EXISTS(
       SELECT 1
       FROM   sys.columns
       WHERE  NAME = 'YourColumnName'
              AND [object_id] = OBJECT_ID('dbo.YourTable')
              AND TYPE_NAME(system_type_id) = 'int'
   )
    ALTER TABLE dbo.YourTable ALTER COLUMN YourColumnName BIT

答案 7 :(得分:1)

对我来说,在sql server 2016中,我是这样做的

*要将列Column1重命名为column2

EXEC sp_rename 'dbo.T_Table1.Column1', 'Column2', 'COLUMN'

*要将列类型从 string 修改为 int :( 请确保数据的格式正确

ALTER TABLE dbo.T_Table1 ALTER COLUMN Column2  int; 

答案 8 :(得分:0)

在紧凑版中,将自动获取日期时间数据类型的大小,即(8),因此无需设置字段大小并为此操作生成错误...

答案 9 :(得分:-2)

我可以使用以下查询修改表字段的数据类型:还可以在Oracle DB中修改

ALTER TABLE table_name
MODIFY column_name datatype;

答案 10 :(得分:-3)

替换数据类型而不会丢失数据

alter table tablename modify columnn  newdatatype(size);