3

次のようなテーブルがある場合:

アイテム

Name varchar(50)
Value real

次に、ビューを作成します。

select sum(Value) as ValueSum from Items

ValueSum データ型は float になります。実際のデータ型のままではないのはなぜですか?

また、これは SQL Server 2005 と 2008 の間で変更されましたか? ビューの ValueSum が float ではなく実数として返される古いデータベース バックアップがあります。バックアップを復元できます。ビューを見ると、実数を返しているように見えますが、再保存するとフロートになります。

4

1 に答える 1

4

realの同義語ですfloat(24)。参照: float と real (Transact-SQL)

複数の を SUM するとreal、2 つであっても、データ型がオーバーフローする可能性があるrealため、より大きなデータ型に昇格されます。

テスト:

declare @t table (a real);
insert @t select 123;
select SQL_VARIANT_PROPERTY(sum(a), 'basetype'),
       SQL_VARIANT_PROPERTY(sum(a), 'precision'),
       SQL_VARIANT_PROPERTY(sum(a), 'scale')
from @t;

-------------
float    53    0

これは、結果が (N)Varchar(MAX) になる特定の文字列関数と同じです。これは、共通テーブル式で使用される場合に一般的であり、式の型の不等式エラーを取り除くために明示的な CAST が必要です。

于 2012-10-22T23:30:46.840 に答える