wake-up-neo.com

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

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

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

175
Ivan Stoyanov

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

ALTER TABLE dbo.YourTable
   ALTER COLUMN YourColumnName BIT

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

300
marc_s

如果是有效的更改。

你可以改变财产。

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

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

17
Sathish
ALTER TABLE tablename
ALTER COLUMN columnname columndatatype(size)

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

15
Xyed Xain Haider

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

7
Philippe Leybaert

如果你使用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)
4
NullException

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

3
saktiprasad swain

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

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
2
Ebrahim Sabeti

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

*将列Column1重命名为column2

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

*修改列类型从 字符串 int :( 请确保数据格式正确

ALTER TABLE dbo.T_Table1 ALTER COLUMN Column2  int; 
1
MNF

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

0
Hardik