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 NULL
到NULL
在某些情况下,这只是一个快速的元数据更改。它可能需要等待表上的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