タイトルは申し訳ありませんが、おそらくあまり明確ではありません。
相互に依存するスクリプトにいくつかの SQL クエリがあります。
スクリプトは、データが挿入される一時テーブル (#temp_data
テーブル) を使用します。
これは期待される出力です:
___________________________________
| speed1 | speed2 | distance |
| 1 | NULL | 10 |
| 3 | NULL | 40 |
| 5 | NULL | 90 |
| NULL | 1 | 10 |
| NULL | 3 | 40 |
| NULL | 5 | 90 |
クエリの構造は次のとおりです (クエリが大きすぎるため、実際のクエリは含めませんでした)。
-- First group
queryForSpeed1
queryToUpdateDistanceBasedOnSpeed1
-- Second group
queryForSpeed2
queryToUpdateDistanceBasedOnSpeed2
クエリの最初のグループ ( queryForSpeed1
and queryToUpdateDistanceBasedOnSpeed1
) を 2 番目のグループとは別に実行すると、期待どおりの出力が得られます。 列speed1
とdistance
列のみにデータが含まれます。
___________________________________
| speed1 | speed2 | distance |
| 1 | NULL | 10 |
| 3 | NULL | 40 |
| 5 | NULL | 90 |
| NULL | NULL | NULL |
| NULL | NULL | NULL |
| NULL | NULL | NULL |
2 番目のグループを実行すると、同じことが起こります。
___________________________________
| speed1 | speed2 | distance |
| NULL | NULL | NULL |
| NULL | NULL | NULL |
| NULL | NULL | NULL |
| NULL | 1 | 10 |
| NULL | 2 | 40 |
| NULL | 3 | 90 |
しかし、両方のグループを実行すると、すべての距離はNULL
次のようになります。
___________________________________
| speed1 | speed2 | distance |
| 1 | NULL | NULL |
| 3 | NULL | NULL |
| 5 | NULL | NULL |
| NULL | 1 | NULL |
| NULL | 2 | NULL |
| NULL | 3 | NULL |
これは、トランザクション管理と一時テーブルに何らかの形で関連していると思いますが、Google で問題を解決するために関連するものを見つけることができませんでした。
私が読んだことから、SQL Serverはすべての更新、挿入などを保存するトランザクションログを保持します...スクリプトの最後に到達すると、実際にすべての挿入と更新を行います。
したがって、距離列に対して行った更新では、以前の更新から一時テーブルにデータがまだ挿入されていないため、すべての速度が NULL であることがわかりますが、クエリの最後に速度がテーブルに挿入されるためです。それらは目に見えます。
スクリプトをバッチで実行するためにGO ステートメントを少し試しましたが、今のところうまくいきません...
私は何を間違っていますか?誰かが私を正しい方向に向けることができますか?
編集
これが実際のクエリです。