使用ALTER TABLE将varchar列调整为更大的大小是不是很糟糕?

时间:2011-08-31 18:49:26

标签: sql-server tsql sql-server-2008-r2

我需要简单地调整从VARCHAR(36)VARCHAR(40)的列。

如果您尝试使用SQL Server企业管理器,它生成的脚本实际上是使用新结构创建一个新表,将现有表中的所有数据插入其中,删除现有表,重命名新表,并重新创建任何索引。

如果您阅读了文档(以及许多在线资源,包括SO),您可以使用ALTER语句进行调整大小。

ALTER是否会以任何方式影响数据的存储方式?指标?统计?我希望避免性能命中,因为这个修改是因为表可能会变大。

4 个答案:

答案 0 :(得分:12)

只需使用ALTER TABLE。 SSMS有点呃,有时候是愚蠢的

您需要删除并重新创建依赖约束(FK,唯一,索引,检查等)

但是,这只是一个元数据更改,对于任何大小的表都会非常快(除非您还将NOT NULL更改为NULL或将varchar更改为nvarchar等)

答案 1 :(得分:4)

不,ALTER TABLEhttp://msdn.microsoft.com/de-de/library/ms190273.aspx)是Microsoft打算进行此类更改的方式。

如果您没有为命令添加额外选项,则不会损坏任何索引或统计信息。 也没有给出数据丢失的可能性,因为您只是使列更大。 一切都应该没问题。

答案 2 :(得分:2)

对于数据库结构的改变,绝对不应该在产品环境中使用SSMS进行,这只是你提出的原因。它可以破坏大表中的性能。 ALTER表是首选方法,它更快,可以存储在源代码控制中,作为测试后推送到prod的更改。

答案 3 :(得分:2)

以下应该是更好的方法来处理这个

IF EXISTS (SELECT   1 
               FROM     INFORMATION_SCHEMA.COLUMNS
               WHERE    TABLE_NAME = '<tablename>' 
               AND      COLUMN_NAME = '<field>')
    BEGIN
        ALTER TABLE <tablename> ALTER COLUMN [<field>] varchar(xxxx) null
    END
ELSE