在大型表上增加VARCHAR列的大小可能会出现问题



我使用SQL Server 2008,我需要使一个VARCHAR字段更大,从(200到1200)在一个表上大约500k行。我想知道的是,是否还有我没有考虑到的问题。

我将使用这个TSQL语句:

ALTER TABLE MyTable
ALTER COLUMN [MyColumn] VARCHAR(1200)

我已经在数据副本上试过了,这条语句没有看到任何不良影响。

那么,这样做会有什么我可能没有考虑到的问题吗?

顺便说一下,该列没有索引。

这只是一个元数据更改:它是快速的。

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

只是想补充我的2美分,因为我谷歌了这个问题,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)

p。同样适用于nvarchar或课程。

从Varchar(200)更改为Varchar(1200)应该不会导致任何问题,因为它只是一个元数据更改,并且SQL server 2008截断了过多的空格,您应该不会看到性能差异,所以简而言之,进行更改应该没有问题。

避免将列转换为varchar(max)的另一个原因是无法在varchar(max)列上创建索引。

在我的情况下,alter列不工作,所以可以使用'修改'命令,如:

alter table [table_name] MODIFY column [column_name] varchar(1200);

相关内容

  • 没有找到相关文章

最新更新