在大型表上增加VARCHAR列的大小时会出现问题吗?

Pau*_*ies 84 sql-server varchar sql-server-2008 alter-column

我正在使用SQL Server 2008,我需要在一个大约500k行的表上创建一个更大的VARCHAR字段,从(200到1200).我需要知道的是,如果有任何问题我没有考虑过.

我将使用此TSQL语句:

ALTER TABLE MyTable
ALTER COLUMN [MyColumn] VARCHAR(1200)
Run Code Online (Sandbox Code Playgroud)

我已经在数据的副本上试过了,这个陈述没有我能看到的不良影响.

这样做有什么可能的问题我可能没有考虑过吗?

顺便说一下,该列未编入索引.

gbn*_*gbn 57

这只是元数据更改:它很快.

观察:明确指定NULL或NOT NULL以避免"事故",如果其中一个SET ANSI_xx设置不同,例如由于某种原因在osql中运行而不是SSMS


jaz*_*cat 11

只是想加我2美分,因为我搜索了这个问题b/c我发现自己处于类似的情况......

要注意的是,虽然从改变varchar(xxx)varchar(yyy)是元数据的变化确实,但改变到varchar(max)是没有的.因为varchar(max)值(也就是BLOB值 - 图像/文本等)以不同方式存储在磁盘上,而不是存储在表行中,而是存储在"行外"中.因此,服务器将在一张大桌子上疯狂,并在几分钟(几小时)内无响应.

--no downtime
ALTER TABLE MyTable ALTER COLUMN [MyColumn] VARCHAR(1200)

--huge downtime
ALTER TABLE MyTable ALTER COLUMN [MyColumn] VARCHAR(max)
Run Code Online (Sandbox Code Playgroud)

PS.同样适用于nvarchar或课程.