当我将列类型从int更改为real时,为什么SQL 2008突然想要删除我的表?据我所知,这在SQL 2005中从未发生过.任何见解都会有所帮助.
我无法相信最高的答案已经在这里待了这么久 - 这是非常危险的建议!
您可以在不丢弃表的情况下进行实际操作:
展开varchar列https://dba.stackexchange.com/questions/5211/changing-column-width
使列可以为空(但反之亦然)
使用sp_rename重命名列
如果您发现自己无法在不删除表的情况下更改列,则通常可以使用SELECT INTO
查询将数据投影到新表中,然后删除旧表(暂时禁用约束),然后重命名投影表.在这种情况下,您需要使数据库脱机以进行维护.
在SQL Server 2008中,转到"工具">>"选项".在小窗口中,单击"Designer".取消选中"防止保存需要更改的更改..."
=====
编辑于2015年9月4日.
我很久很久以前在这里添加了这个答案,描述了我将如何解决上述问题所描述的情况.从那以后,下面的线程中的用户已经以我当时推荐的方式暴露了一些关于做事的问题.基本上,我描述的解决方案在某些情况下可能会有问题.然后,我建议您继续阅读以检查其他用户的评论,并为您选择最佳解决方案.
这是我使用的:
-- 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
将数据复制到新列.
放下旧栏目.
将新列重命名为旧列的名称.