我需要简单地调整从VARCHAR(36)
到VARCHAR(40)
的列。
如果您尝试使用SQL Server企业管理器,它生成的脚本实际上是使用新结构创建一个新表,将现有表中的所有数据插入其中,删除现有表,重命名新表,并重新创建任何索引。
如果您阅读了文档(以及许多在线资源,包括SO),您可以使用ALTER
语句进行调整大小。
ALTER
是否会以任何方式影响数据的存储方式?指标?统计?我希望避免性能命中,因为这个修改是因为表可能会变大。
答案 0 :(得分:12)
只需使用ALTER TABLE。 SSMS有点呃,有时候是愚蠢的
您需要删除并重新创建依赖约束(FK,唯一,索引,检查等)
但是,这只是一个元数据更改,对于任何大小的表都会非常快(除非您还将NOT NULL更改为NULL或将varchar更改为nvarchar等)
答案 1 :(得分:4)
不,ALTER TABLE
(http://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