我有SQL Server数据库,我刚刚意识到我可以将其中一列的类型从int
更改为bool
。
如何在不丢失已输入该表的数据的情况下执行此操作?
答案 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)
答案 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);