Varchar(255) 到 Varchar(MAX)

Posted

技术标签:

【中文标题】Varchar(255) 到 Varchar(MAX)【英文标题】:Varchar(255) to Varchar(MAX) 【发布时间】:2011-02-11 08:46:17 【问题描述】:

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

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

谢谢

【问题讨论】:

奇怪,在 SQL Server 2005 中试用过,对我来说很好。 顺便说一句,抛出的错误是什么? '不允许保存更改。您所做的更改需要删除并重新创建以下表。您要么对无法重新创建的表进行了更改,要么启用了选项阻止保存需要重新创建表的更改。未启用“防止保存更改”选项... SQL Management Studio 会这样做(请参阅他们用来更改表的 SQL 的更改脚本),@astander 的答案是更好的选择。很高兴您找到了解决方案:D 【参考方案1】:

'不允许保存更改。这 您所做的更改需要 以下表格将被删除和 重新创建。你要么做了 无法更改的表 重新创建或启用该选项 防止保存需要的更改 要重新创建的表。选项 “防止保存更改”不是 启用..

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

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

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

【讨论】:

谢谢 marc_s。我已经没有勾选这个,它仍然阻止我进行更改。当我自己编写时,上面 asstander 的 alter 语句起作用。谢谢:) @JD:嗯...奇怪...通常这就是问题所在 - 不过很高兴您已经有了解决方案!【参考方案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 NULLNULL 在某些情况下,这只是一个快速的元数据更改。它可能需要等待表上的SCH-M 锁定,但一旦它获得,更改将几乎是即时的。 需要注意的一个警告是,在等待 SCH-M 锁定期间,其他查询将被阻止,而不是在它前面跳过队列,因此您可能需要考虑首先添加 SET LOCK_TIMEOUT。 还要确保在ALTER TABLE 语句中明确指定NOT NULL,如果那是原始列状态,否则列将更改为允许NULL

【讨论】:

这不是和this existing answer一样吗? 为什么 ALTER 到 varchar(MAX) 会出现问题?【参考方案3】:

你应该可以使用 TSQL 来做到这一点。

类似

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

【讨论】:

以上是关于Varchar(255) 到 Varchar(MAX)的主要内容,如果未能解决你的问题,请参考以下文章

当保存到 SQL Server 到 varchar(255) 时,RODBC::sqlsave() 会截断 DF 中的 col

在 MySQL 中声明值大于 255 的 VARCHAR 是不是明智?

VARCHAR 字段被截断为 255 个字符

mysql varchar最大是多少?

数据库中的 varchar(255) 原因剖析

<转> MySQL中采用类型varchar(20)和varchar(255)对性能上的影响