Varchar(255)到Varchar(MAX)

是否可以将SQL Server 2008数据库中的列types从varchar(255)更改为varchar(MAX)而不必删除表并重新创build?

每次我尝试使用SQL Server Management Studio时,都会引发一个错误 – 但为了节省自己的头痛,我很高兴知道是否可以在不删除和创build的情况下更改该types。

谢谢

你应该可以使用TSQL来完成。

就像是

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

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

这是默认打开的SQL Server Management Studio 2008中的一个新function。 无论何时你做出更大的改变,SSMS只能通过创build一个新表来重新创build表,然后从旧表移动数据 – 全部在后台(这些更改包括对列的重新sorting等等)。

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

替代文字160wpb4.png

它位于“ Tools > Options ,一旦取消选中该选项,您可以再次对表格devise器中的表格结构进行这些更改。

意识到
与类似的东西

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

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

马丁史密斯的answare:

如果你将它增加到varchar(100 - 8000) (即varchar(max))以外的任何东西varchar(max)) ,你通过TSQL而不是SSMS GUI

  ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200)[NOT] NULL 

并且不会将列的可空性从NULL更改为NOT NULL (在所有行被validation的情况下都会locking表,并且在某些情况下可能将其写入或从NOT NULL写入NULL ,那么这是一个快速的元数据唯一更改,可能需要等待SCH-M在表上locking,但是一旦获得这个更改就会立即发生,需要注意的是在等待SCH-Mlocking期间,其他查询将被阻塞,而不是跳过队列所以你可能要考虑首先添加一个SET LOCK_TIMEOUT并且确保在ALTER TABLE语句中显式指定了NOT NULL如果这是原始列​​状态,否则该列将被改变为允许NULL