2016-10-15 12 views
-1

Rangeという名前のテーブルがあり、データ型がintmin_valueという列が含まれています。私はその列に長い値を保存する必要があります。 ALTER TABLEは、既存のデータに対してより多くの領域を割り当てます。それは非効率的です。基本的に私が必要とするのは、今後追加されるエントリのためのスペースです。既存のものではありません。ALTER TABLEを使用せずにSQL Serverのテーブル列の数値範囲を増やす

+0

既存のデータには1つのデータ型を設定することはできません。将来のデータ用に大きなデータ型を使用することはできません。 'int'がもう十分に大きくなければ、' ALTER TABLE'を使ってその列のデータ型を 'BIGINT'に変更する必要があります。これは**すべての**行 - 既存のものと将来のものに適用されます。これを回避する方法はありません。 –

答えて

1

ALTER TABLEを使用し、列データ型をBIGINTに変更するのが最も効果的です。

幸運なことに消費できる8バイトの値が不安な場合は、これが解決する1つの問題であるため、Enterprise Editionの場合は行圧縮を有効にできます。

代わりに、新しいNULL可能なBIGINT列min_value2を追加することもできます。 ISNULL(min_value2、min_value)を使用して、1つの列に値があり、永続化されていない計算列があることを確認するチェック制約を設定できます。メタデータのみであるため、最初はこれは非常に安いでしょうが、新しい行と更新された行がの両方のスペースを占めるようになると、時間が経つにつれてより高価になります。列。

もう1つの方法は、BIGINTを使用して新しいテーブルを作成し、単にそれを必要とする行に使用することです。あなたは、組合がそれらを一緒にするという見解を持つことができます。しかし、これにより複雑さが増し、クエリ実行計画の効率が低下する可能性があります。

関連する問題