1

SQL テキスト "SELECT * FROM TABLE1 WITH (NOLOCK)" があります。

2 つの質問:

  1. SQL テキストに NOLOCK ヒントを含めずに、TADOQuery で NOLOCK ヒントを使用するにはどうすればよいですか? SQL を動的に構築した文字通り何千もの TADOQuery がありますが、MSSQL 以外のデータベース プラットフォームで使用することは言うまでもなく、それらすべてに WITH (NOLOCK) を追加することは困難です。TADOQuery プロパティはありますか?

  2. TADOTable で同じことを達成するにはどうすればよいですか? TADOTable には SQL がないので、NOLOCK ヒントを使用するように指示するにはどうすればよいでしょうか?

ありがとう

4

2 に答える 2

2

ヒントはデータベース固有であるため、サポートされているデータベースごとに適切なヒントを発行する必要があります。一部のデータベースでは、同等のものもありません。たとえば、Oracle は同様のものを許可していません (リーダーはライターをブロックせず、ライターはリーダーをブロックしないため、必要ありません)。

私見では、TADOTable コンポーネントをまったく使用しないでください。とにかく、生成されたクエリのヒントを指定する方法がありません。とにかく一般的すぎます。

また、NOLOCK の使用には細心の注意を払う必要があります。これは、READ UNCOMMITTED、別名ダーティリードを意味します。トランザクション保護をバイパスしています。バイパスする十分な理由がない限り、バイパスすべきではありません。パフォーマンスの向上は、データの整合性と一貫性の損失に見合うものではない可能性があります。

于 2010-10-01T15:44:58.070 に答える
0

MS SQLを使用する場合は、接続時に以下のステートメントを1回実行します

トランザクション分離レベルの読み取りをコミットせずに設定する

応援AP

于 2010-10-01T23:32:05.970 に答える