当在一个大的表上增加VARCHAR列的大小时会有什么问题?
我正在使用SQL Server 2008,我需要在大约500k行的表上创build一个更大的VARCHAR字段,从(200到1200)。 我需要知道的是,如果有什么问题我没有考虑。
我将使用这个TSQL语句:
ALTER TABLE MyTable ALTER COLUMN [MyColumn] VARCHAR(1200)
我已经在数据的副本上尝试过了,这个声明没有我能看到的不良影响。
那么这样做有没有可能的问题,我可能没有考虑?
顺便说一下,列没有索引。
这只是一个元数据更改:它很快。
观察:如果其中一个SET ANSI_xx设置不同,则明确指定NULL或NOT NULL以避免“事故”,例如,由于某些原因,在osql而非SSMS中运行
从Varchar(200)更改为Varchar(1200)应该不会引起任何问题,因为它只是一个元数据更改,而SQL Server 2008会截断超出的空格,所以您应该看到没有性能差异,因此总之不应该有任何问题更改。
只是想添加我的2美分,因为我GOOGLE了这个问题B / C我发现自己在类似的情况…
BE AWARE ,虽然从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)
PS。 同样适用于nvarchar
或course。
在我的情况下,改变列不工作,所以可以使用“修改”命令,如:
alter table [table_name] MODIFY column [column_name] varchar(1200);