我有一个SQL Server数据库,我刚刚意识到可以将其中一列的类型从int
更改为bool
。
如何在不丢失已输入到该表中的数据的情况下实现这一点?
我有一个SQL Server数据库,我刚刚意识到可以将其中一列的类型从int
更改为bool
。
如何在不丢失已输入到该表中的数据的情况下实现这一点?
你可以使用以下命令轻松完成此操作。任何值为0的都将变成0(BIT = false),而其他任何值都将变成1(BIT = true)。
ALTER TABLE dbo.YourTable
ALTER COLUMN YourColumnName BIT
另一种选择是创建一个新的BIT
类型列,从旧列中填充数据,完成后删除旧列,并将新列重命名为旧名称。这样,如果在转换过程中出现问题,您仍然拥有所有数据,可以随时回退。
NULL
仍然是 NULL
,0
变成 False
,非零值(1、-1、1999、-987...)变成 True
。 - Álvaro GonzálezALTER TABLE tablename
ALTER COLUMN columnname columndatatype(size)
注意:如果有列宽,请同时写出列宽大小。
如果更改是有效的。
您可以更改该属性。
工具 --> 选项 --> 设计师 --> 表格和数据库设计师 --> 取消勾选 --> 防止保存需要重新创建表格的更改。
现在,您可以轻松更改列名称而无需重新创建表格或丢失记录。
如果您使用的是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)
为什么你认为会丢失数据?只需要进入管理工具并更改数据类型即可。如果现有的值可以转换为bool(bit),它就会这样做。换句话说,如果在原始字段中“1”映射到true,“0”映射到false,那么你就没问题了。
更改列数据类型并检查列的类型:
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
对于我来说,在SQL Server 2016中,我会这样做:
*将列Column1重命名为column2
EXEC sp_rename 'dbo.T_Table1.Column1', 'Column2', 'COLUMN'
*将列的类型从字符串修改为整数:(请确保数据格式正确)
ALTER TABLE dbo.T_Table1 ALTER COLUMN Column2 int;
我可以使用以下查询修改表字段的数据类型,也可以在Oracle数据库中进行修改:
ALTER TABLE table_name
MODIFY column_name datatype;