【问题标题】:Varchar(255) to Varchar(MAX)Varchar(255) 到 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

标签: sql types varchar


【解决方案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

【讨论】:

【解决方案3】:

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

类似

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 2010-12-12
    • 2011-12-07
    • 2011-10-09
    • 2016-06-19
    • 2010-09-13
    相关资源
    最近更新 更多