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-M
locking期间,其他查询将被阻塞,而不是跳过队列所以你可能要考虑首先添加一个SET LOCK_TIMEOUT
并且确保在ALTER TABLE
语句中显式指定了NOT NULL
如果这是原始列状态,否则该列将被改变为允许NULL
。