2017-05-22 18 views
0

私たちは、新たに挿入された行の選択は多分右の挿入後に逃したように見える場合、Sybase ASE 15 DBと先週起こった奇妙な何かを持っているSybaseの欠落挿入

私たちのテーブルにはmilestoningのために開始/終了タイムスタンプを使用しています。例は

id number, 
name varchar(32), 
start timestamp, 
end timestamp; 

です。「更新」は既存の終了点の更新となります。新しいレコードの挿入物。例えば、更新に

id name start    end 
1 alice 2010-01-01 00:00:00 3000-01-01 00:00:00 

は(ID開始、終了)に行ロックとインデックスと今

id name start    end 
1 alice 2010-01-01 00:00:00 2010-01-01 08:00:00 
1 bob 2010-01-01 08:00:00 3000-01-01 00:00:00 

及び更新及び挿入の両方が同一のトランザクションで行われ

なり、選択クエリで、分離レベル1を使用して選択するとき:理想的

select * from table where id=1 and start<=getdate() and end>getdate() 

Dを実行したときに選択更新時には、コミットして最新の行を返すまでブロックする必要があります。

しかし、私たちの場合、ブロックされていましたが、返された行はありませんでした。

これは、選択が実行されると、更新は表示されますが、挿入は表示されないことを意味します。それは可能ですか?

何らかの形でコミットすると、新しい行が挿入されますが、インデックスは更新されないため、選択に新しい行が表示されませんでしたか?

おかげ

答えて

0

これは、Sybase ASEある場合は、「タイムスタンプ」とは異なるデータ型を選択する必要があります - それは現実の日付/時間とは無関係のASEで特殊なデータ型、です。代わりに 'bigdatetime'または 'datetime'を使用してください。