0

ソーステーブルTEST(抜粋)。括弧内の値は、日付タイプを決定します。

ID (integer)  |   SAMPLES (double precision)   | NSAMPLES (double precision)
------------------------------------------------------------------------------
575            10.000000                        10.000000

問題のあるSQLコマンドは次のとおりです。

insert into TEST
select * from TEST where ID=575;

オープンソースツールFlameRobinのコマンドラインからこのコマンドを実行すると

ここに画像の説明を入力してください

更新されたテーブルは次のようになります

ID (integer)  |   SAMPLES (double precision)   |  NSAMPLES (double precision)
------------------------------------------------------------------------------
575            10.000000                          10.000000
810            10.000000                          10.000000

ストアドプロシージャから(FlameRobinまたはBDE(Borland Database Engine)コンポーネントを使用する独自のアプリケーションから)同じコマンドを実行すると、結果は次のようになります。

ID (integer)  |   SAMPLES (double precision)   | NSAMPLES (double precision)
------------------------------------------------------------------------------
575            10.000000                         10.000000
810            10.000000                         10.000000
811            10.000000                         NULL

SAMPLES列とNSAMPLES列の両方に興味をそそられるのは、同じ日付型、同じソース値(= 10.000000)であり、どちらもnull許容です。ストアドプロシージャから呼び出されたコピーコマンドがNSAMPLES列の値をコピーしないのはなぜですか?これの代わりに、新しいレコードにNULL値を挿入します。

2012年11月16日追加

たぶん、db管理ツールFlameRobinからの次のスクリーンショットにいくつかのヒントがあります。これらには、ストアドプロシージャINSERT_TESTおよびテーブルTESTの完全な定義が含まれています。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

フィールドリストにNSAMPLES列がないのはなぜですか?

ここに画像の説明を入力してください

4

1 に答える 1

0

問題は、2つの環境によるIDENTITY列の扱いが異なることです。

代わりに、これを行います。

 Insert into TEST(SAMPLES, NSAMPLES)
 Select SAMPLES, NSAMPLES 
 from TEST where ID = 575

つまり、すべての列に明示的に名前を付けると、問題は解決します。とにかく、これは一般的に良い考えです。

于 2012-11-15T15:21:30.287 に答える