我使用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列不工作,所以可以使用'修改'命令,如: