我正在使用 SQL Server 2008,需要将一个有大约 500k 行的表中的 VARCHAR 字段扩大,从 200 到 1200。我想知道是否存在任何我没有考虑到的问题。
我将使用以下 TSQL 语句:
ALTER TABLE MyTable
ALTER COLUMN [MyColumn] VARCHAR(1200)
我已经在数据的一个副本上尝试过这个语句,并且我没有看到任何不良影响。
那么,我可能没有考虑到的做法会有什么潜在问题呢?
顺便说一下,该列没有被索引。
我正在使用 SQL Server 2008,需要将一个有大约 500k 行的表中的 VARCHAR 字段扩大,从 200 到 1200。我想知道是否存在任何我没有考虑到的问题。
我将使用以下 TSQL 语句:
ALTER TABLE MyTable
ALTER COLUMN [MyColumn] VARCHAR(1200)
我已经在数据的一个副本上尝试过这个语句,并且我没有看到任何不良影响。
那么,我可能没有考虑到的做法会有什么潜在问题呢?
顺便说一下,该列没有被索引。
这只是元数据的更改,非常快速。
一种观察方式是明确指定NULL或NOT NULL,以避免"意外"发生,如果SET ANSI_xx设置之一不同,请显式地指定,例如由于某种原因在osql而不是SSMS中运行。
varchar(200)
到varchar(max)
是否适用相同的规则吗? - CodeNaked因为我发现自己处于类似的情况中,所以想要补充我的两分钱...
请注意,虽然从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)
附注:同样适用于nvarchar
。
VARCHAR(X)
,其中将 X 增加到小于或等于 8000 是快速的,而大于 8000 或 MAX 则会变慢? - TTT