0

UPDATE [User] SET SellerRating = SellerRating + {0} WHERE Id='{1}'; SELECT SellerRating FROM [User] WHERE Id='{1}'", rating, toUserId);

SQLCommandオブジェクトを使用して上記のクエリでスカラーを実行する場合、
SQL Serverは、2番目のクエリの値が手元にあることを認識していますか?
または、インデックスの検索を再開しますか?

そしてどうやってそれを知ることができますか?

お時間をいただきありがとうございます

4

3 に答える 3

2

データベース操作は互いに独立しているため、SQL Serverは、同じ行を含む2つのクエリがあるという事実を考慮しません。

また、クエリをパラメータ化する必要があります。

于 2012-08-22T17:28:33.360 に答える
2

実際、明確にするために、SELECTの戻り値は、UPDATEステートメントで更新された行と同じではない場合があります。

2つのステートメントの間に、別のトランザクションがテーブルの行を更新、挿入、または削除する場合があります。一般的なアプローチとして、SQLは2番目のSELECTを評価して、データのこのような変更を考慮に入れる必要があります。

もちろん、データベースおよび構成に固有の警告があります。これらのステートメントは、たとえば、テーブルに書き込みロックがあるトランザクション内にある可能性があります。ただし、一般に、2番目のステートメントを評価する必要があります。

ただし、変更されるのは、UPDATEステートメントによって変更されたデータがまだページキャッシュに残っている可能性があることです。その場合、キャッシュミスが発生しないため、SELECTは非常に高速に実行されます。

于 2012-08-22T17:36:42.117 に答える
2

SQL Serverは、2番目のクエリの値が手元にあることを知っていますか?または、インデックスの検索を再開しますか?

世界中のほとんどすべての立派なデータベースは、1)再度検索し 2)キャッシュ内の行を見つけます。したがって、答えは両方の質問に「はい」です。重要な知識が不足していると思います。バッファプールとその仕組みについて読む必要があります。

于 2012-08-22T18:44:33.467 に答える