ロック ヒント (SQL Server Compact Edition)

SELECT、INSERT、UPDATE、および DELETE の各ステートメントを使用して、テーブル レベルのロック ヒントの範囲を指定し、Microsoft SQL Server 2005 Compact Edition (SQL Server Compact Edition) の既定のロック動作を変更できます。ロック ヒントは、絶対に必要な場合にだけ使用してください。ロック ヒントの使用が、同時実行性に悪影響を及ぼすことがあります。

重要 :
SQL Server Compact Edition では、操作に必要なロックが自動的に取得されます。次の表に示すロック ヒントを使用すると、SQL Server Compact Edition でさらに多くのロックが行われるようになります。ロック ヒントを使用してリソースのロックを回避することはできません。

次の表に、SQL Server Compact Edition で使用できるロック ヒントについて説明します。

ロック ヒント名 ヒントの説明

GRANULARITY

ROWLOCK

データの読み取りまたは変更を行う場合に、行レベルのロックを使用します。これらのロックは必要に応じて取得され、解除されます。

SELECT 操作では行で S ロックが取得されます。

PAGLOCK

データの読み取りまたは変更を行う場合に、ページ レベルのロックを使用します。これらのロックは必要に応じて取得され、解除されます。

SELECT 操作ではページで S ロックが取得されます。

TABLOCK

データの読み取りまたは変更を行う場合に、テーブル ロックを使用します。このロックは、ステートメントが終了するまで保持されます。

SELECT 操作ではテーブルで S ロックが取得されます。

DBLOCK

データの読み取りまたは変更を行う場合に、データベース ロックを使用します。このロックは、ステートメントが終了するまで保持されます。

SELECT 操作ではデータベースで S ロックが取得されます。

LOCKMODES

UPDLOCK

テーブルの読み取り中は、共有ロックの代わりに更新ロックを使用し、ステートメントまたはトランザクションが終了するまで保持ロックを使用します。UPDLOCK では、他のユーザーがデータを読み取るのをブロックせずにデータを読み取ることができます。また、最後の読み取り以降はデータが変更されていないという保証があるので、後でデータを更新できます。

SELECT 操作では、U ロックが取得されます。既定の粒度は ROWLOCK です。

XLOCK

テーブルの読み取り中は、共有ロックの代わりに排他ロックを使用し、ステートメントまたはトランザクションが終了するまでロックが保持されます。

SELECT 操作では、X ロックが取得されます。既定の粒度は ROWLOCK です。

DURATION

HOLDLOCK

必要なテーブル、行、またはデータ ページが要求されなくなったときに、すぐにロックを解除するのではなく、トランザクションが終了するまでロックを保持します。

粒度が指定されていない場合、ROWLOCK が適用されます。

NOLOCK

いずれのロックも実行しません。これは SELECT 操作の既定です。NOLOCK は INSERT、UPDATE、および DELETE の各ステートメントには適用されません。

メモ :
SQL Server の場合、NOLOCK ヒントを使用すると Read Uncommitted 動作が有効になります。SQL Server Compact Edition の場合、NOLOCK ヒントを使用した場合も引き続き Read Committed 分離レベルが使用されます。SQL Server Compact Edition ではデータのコピーが保持されるので、データ保護のための共有ロックを取得しなくてもデータを読み取れます。

ロック ヒントの使用に関する詳細については、SQL Server Books Online の「ロック ヒント」を参照してください。

NOLOCK ヒント

SQL Server Compact Edition では、SQL Server と同様の方法でロック ヒントを使用できます。ただし、NOLOCK ヒントの動作は SQL Server Compact Edition と SQL Server とで大きく異なります。SQL Server Compact Edition の場合、NOLOCK ヒントは SELECT ステートメントの既定ですが、この場合も引き続き Read Committed 動作が適用されます。

SQL Server の場合、既定の分離レベルの Read Committed が指定された SELECT ステートメントでは、行に対して読み取り時に S ロックが取得され、解放されます。これにより、分離レベルが適用されますが、S ロックが必要な行に互換性のないロックが存在する場合に、SELECT ステートメントが待機することを意味します。NOLOCK ヒントが指定されている場合、SELECT 操作では S ロックが取得されずにデータが読み取られます。操作は成功しますが、この場合、SELECT ステートメントはコミットされないデータも読み取ります。

SQL Server Compact Edition では、データが Read Committed となるよう S ロックが使用されることはありません。SQL Server Compact Edition ではデータの変更時にページのバージョン管理メカニズムが使用されるので、SELECT ステートメントに必要なデータはページの適切なコピーから読み取ることができます。Read Committed を確認するために、S ロックを取得する必要はありません。したがって、SQL Server Compact Edition では SELECT ステートメントに NOLOCK が使用されますが、データは Read Committed の分離レベルで読み取られます。SQL Server Compact Edition でダーティ リード (Read Uncommitted) が発生することはありません。

メモ :
NOLOCK ヒントは、Sch-S ロックまたは Sch-X ロックに影響しません。

参照

概念

ロックについて
トランザクション分離レベル
ロックに関する情報の表示
ロック タイムアウト

ヘルプおよび情報

SQL Server Compact Edition のサポートについて