Mid*_*one 43 sql-server column-types sql-server-2008
当我将列类型从int更改为real时,为什么SQL 2008突然想要删除我的表?据我所知,这在SQL 2005中从未发生过.任何见解都会有所帮助.
Joh*_*lph 45
我无法相信最高的答案已经在这里待了这么久 - 这是非常危险的建议!
您可以在不丢弃表的情况下进行实际操作:
如果您发现自己无法在不删除表的情况下更改列,则通常可以使用SELECT INTO 查询将数据投影到新表中,然后删除旧表(暂时禁用约束),然后重命名投影表.在这种情况下,您需要使数据库脱机以进行维护.
Mar*_*que 38
在SQL Server 2008中,转到"工具">>"选项".在小窗口中,单击"Designer".取消选中"防止保存需要更改的更改..."
=====
编辑于2015年9月4日.
我很久很久以前在这里添加了这个答案,描述了我将如何解决上述问题所描述的情况.从那以后,下面的线程中的用户已经以我当时推荐的方式暴露了一些关于做事的问题.基本上,我描述的解决方案在某些情况下可能会有问题.然后,我建议您继续阅读以检查其他用户的评论,并为您选择最佳解决方案.
use*_*353 36
这是我使用的:
-- Add new column
ALTER TABLE MyTable
ADD Description2 VARCHAR(MAX)
GO
-- Copy data to new column (probably with modifications)
Update MyTable
SET Description2 = Description
GO
-- Drop old column
ALTER TABLE MyTable
DROP COLUMN Description
GO
-- Rename new column to the original column's name.
sp_RENAME 'MyTable.Description2' , 'Description', 'COLUMN'
GO
Run Code Online (Sandbox Code Playgroud)