我正在使用SQL Server 2008,并且需要在具有约50万行的表上将VARCHAR字段变大,从(200到1200)。我需要知道的是是否有未考虑的问题。
我将使用以下TSQL语句:
ALTER TABLE MyTable
ALTER COLUMN [MyColumn] VARCHAR(1200)
我已经在数据副本上进行了尝试,并且该语句没有我看到的不良影响。
那么这样做有没有我可能没有考虑过的问题呢?
顺便说一句,该列未编制索引。
我正在使用SQL Server 2008,并且需要在具有约50万行的表上将VARCHAR字段变大,从(200到1200)。我需要知道的是是否有未考虑的问题。
我将使用以下TSQL语句:
ALTER TABLE MyTable
ALTER COLUMN [MyColumn] VARCHAR(1200)
我已经在数据副本上进行了尝试,并且该语句没有我看到的不良影响。
那么这样做有没有我可能没有考虑过的问题呢?
顺便说一句,该列未编制索引。
Answers:
这仅是元数据更改:快速。
观察:如果SET ANSI_xx设置之一不同,则明确指定NULL或NOT NULL以避免“意外”,例如由于某种原因在osql中运行而不是SSMS
varchar(200)
到时是否适用相同的规则varchar(max)
吗?
只是想加我的2美分,因为我在b / c上搜索这个问题后,发现自己处在类似的情况下...
要注意的是,虽然从改变varchar(xxx)
到varchar(yyy)
是元数据的变化确实,但改变到varchar(max)
是没有的。因为varchar(max)
值(aka BLOB值-图像/文本等)以不同的方式存储在磁盘上,而不是存储在表行中,而是存储在“行外”。因此,服务器将在一个大桌子上发疯,并在几分钟(几小时)内变得无响应。
--no downtime
ALTER TABLE MyTable ALTER COLUMN [MyColumn] VARCHAR(1200)
--huge downtime
ALTER TABLE MyTable ALTER COLUMN [MyColumn] VARCHAR(max)
PS。同样适用于nvarchar
或课程。
在我的情况下,alter列不起作用,因此可以使用“修改”命令,例如:
alter table [table_name]修改列[column_name] varchar(1200);