2

SQL更新の実行中、

update request set state_id = 2 where id in (
           select id from request where state_id = 0 and entity_id in 
           (<list of numbers>)
)

これにより、一度に 7 行だけが更新されます。

内側の選択クエリ、

 select id from request where state_id = 0 and entity_id in (<list of numbers>)

2000 以上のレコードを返します。

Squirrel SQL クライアントを使用してクエリを実行し、制限行が 3000 に設定されているかどうかを確認しました。

さらに興味深いのは、更新クエリを連続して実行するまでの時間を長くすると、より多くの行が更新されることです。つまり、10秒待って更新を実行すると、45行が更新されました。しかし、高速で実行すると、7 行だけが更新されます。

誰かが私が間違っているかもしれないことを指摘するのを手伝ってもらえますか?

内部選択の実行 - 選択する:

アップデートの実行 - アップデート:

4

1 に答える 1

0

サブクエリを含むより複雑なクエリを導入する理由が見当たらないため、適切な更新を作成することをお勧めします。また、以前に変更していないことを確認するために@@ROWCOUNT

SET @@ROWCOUNT 0;

UPDATE dbo.request
  SET state_id = 2
  WHERE state_id = 0 
  AND entity_id IN (<list of numbers>);

また、Management Studio で行数を人為的に制限していないことも確認してください。ツール > オプション:

ここに画像の説明を入力

(まあ、正しくタグ付けしていれば、それは関連していたでしょう。Sybaseに対して使用するクライアントツールをチェックし、同様のオプションがあるかどうかを確認してください。)

于 2013-11-05T18:48:38.233 に答える