在不使用ALTER TABLE的情况下增加SQL Server中表列的数值范围

时间:2016-10-15 19:13:30

标签: sql-server

我有一个名为Range的表,其中包含一个数据类型为min_value的列int。我需要为该列保存长值。 ALTER TABLE为现有数据分配更多空间。那效率很低。基本上我需要的是将来添加条目的更多空间。不适用于现有的。

1 个答案:

答案 0 :(得分:1)

您最好只使用ALTER TABLE并将列数据类型更改为BIGINT

如果您担心8个字节的值可能会消耗得更小,那么在Enterprise Edition上可以启用行压缩,因为这是解决的一个问题。

另一种方法是添加一个新的可空BIGINT列min_value2。您可以使用检查约束来确保只有一列具有值,使用ISNULL(min_value2,min_value)确保非持久计算列。最初这将是非常便宜的,因为它只是元数据,但随着时间的推移,它将更加昂贵,因为新行和更新的行最终将占用两个列的空间。

另一种方法是使用BIGINT创建一个新表,然后继续使用它来处理需要它的行。你可以有一个视图,联合将它们组合在一起。但这会增加复杂性并可能降低查询执行计划的效率。