56

是否可以将 SQL Server 2008 数据库中的列类型从 更改为varchar(255)varchar(MAX)而无需删除表并重新创建?

每次我尝试使用它时,SQL Server Management Studio 都会向我抛出一个错误 - 但为了让自己头疼,如果我可以更改类型而无需 DROP 和 CREATE,我会很高兴。

谢谢

4

3 回答 3

97

您应该能够使用 TSQL 来做到这一点。

就像是

ALTER TABLE [table] ALTER COLUMN [column] VARCHAR(MAX)
于 2010-04-23T03:18:39.433 回答
15

'不允许保存更改。您所做的更改需要删除并重新创建以下表。您要么对无法重新创建的表进行了更改,要么启用了选项阻止保存需要重新创建表的更改。未启用“防止保存更改”选项。

这是 SQL Server Management Studio 2008 中的一个新“功能”,默认情况下是打开的。每当您进行较大的更改时,SSMS 只能通过创建一个新表然后从旧表中移动数据来重新创建表 - 所有这些都在后台进行(这些更改包括对列重新排序等)。

这个选项默认是关闭的,因为如果你的表有 FK 约束和东西,这种重新做表的方式可能会失败。但是您绝对可以打开该功能!

替代文字

它在下面Tools > Options,一旦您取消选中该选项,您就可以再次在表设计器中对表结构进行此类更改。

于 2010-04-23T05:09:40.457 回答
2

注意
类似的东西

ALTER TABLE [table] ALTER COLUMN [column] VARCHAR(MAX)

https://dba.stackexchange.com/questions/15007/change-length-of-varchar-on-live-prod-table

马丁史密斯的回答:

如果您将其增加到varchar(100 - 8000)(即除此之外的任何内容,varchar(max))并且您通过 TSQL 而不是 SSMS GUI 执行此操作

ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL
NULL并且不改变从到到的列可空性NOT NULL(这将在所有行都经过验证并可能在某些情况下写入或从 NOT NULL到到时锁定表,NULL那么这只是一个快速的元数据更改。它可能需要等待SCH-M表上的锁定但一次它知道更改几乎是即时的。需要注意的一个警告是,在等待SCH-M锁定期间,其他查询将被阻止而不是在其前面跳过队列,因此您可能要考虑添加SET LOCK_TIMEOUT第一个。确保在ALTER TABLE语句中明确指定NOT NULL这是否是原始列状态,否则该列将更改为允许NULL

于 2015-11-25T09:56:37.883 回答