2

私の会社は最近 (SQL Server 2005 データベースで) データ移行を実行しましたが、SELECT INTO で作成された一部のテーブルが元のテーブルの計算フィールドを維持していないことに気付きましたが、代わりに SQL Server は、元の計算。たとえば、次の表があるとします。

create table Example (
 id int not null,
 quantity decimal(19,5) not null,
 price decimal(19,5) not null,
 total as price*quantity 
)

SELECT * INTO Example2 FROM Example を実行すると、次のようになります。

create table Example2 (
 id int not null,
 quantity decimal(19,5) not null,
 price decimal(19,5) not null,
 total decimal(38,9) null
)

不正なフィールドを削除して再作成することで修正しましたが、SELECT INTO で作成されたテーブルに計算フィールドを維持する方法があるかどうかを知りたいです (おそらく、特別な SQL Server 構成または代替 SQL コマンドを使用)。

前もって感謝します。

4

4 に答える 4

2

SELECT INTO でこれを行うことはできないと思います。ビューに対して選択する場合と同様に、結果を取得して新しいテーブルに送り込むだけです。

最初に計算列を含むテーブルを作成してから、非計算列のソース テーブルから通常の挿入を行う必要があります。

于 2008-12-29T19:31:17.253 に答える
1

ポリシーとして、特に移行時にSELECTINTOを使用してテーブルを作成することは避けるのが最善です。計算が失われるだけでなく、インデックス、トリガー、およびおそらくデフォルトや制約も失われます。移行では、トリガーやインデックスなど、移動するテーブルを常にスクリプト化する必要があります。

于 2008-12-29T20:15:00.720 に答える
0

私の理解では、新しいテーブルはレコード セットのデータ型から作成されます。ただし、レコード セットには、結果の値がどのように生成されるかに関する情報が含まれていないため、計算式は失われます。(極端な例として、SELECT INTO のソースとして GROUP BY を含むビューを考えてみてください)

于 2008-12-29T19:30:40.123 に答える
0

Select Into ステートメントを変更したくない場合は、列を削除 (Alter Table Drop Column) して計算列として再作成 (Alter Table Add) することもできます。

于 2021-09-30T18:14:52.373 に答える