0

SQL Server でロックを使用して、1 つのレコードを選択すると、ロックが解除されるまで、ロックされたレコードが他の選択クエリによって返されないようにすることはできますか?

以下は、サンプル クエリです。

SQL テーブル名: Table1

SQLテーブルのデータを次のようにします:3つのそれぞれの行に値(「ABC」、「XYZ」、「Test」)を持つ1つの列「名前」のみ

したがって、以下のようにロックを使用して選択クエリを実行すると:

 SELECT TOP 1 * FROM Table1 -- Suppose this query returns ABC 

次に、新しいクエリウィンドウで同じクエリを(何度も)実行すると、ロックを解除するまで値「ABC」が返されません。

4

2 に答える 2

1
SELECT *
FROM T WITH (XLOCK, ROWLOCK, HOLDLOCK) --disallow readers, lock on rows not pages or table
WHERE SomeCondition

SNAPSHOTただし、これはモードでの同時読み取りをブロックしません。それらをブロックすることはできません。

于 2013-08-26T12:59:26.663 に答える
-2

DML をロックするには、[Select for Update] を使用できます。ただし、select もロックしたい場合は、追加の列とトリガーを使用して明示的にロックを行う必要があります。

于 2013-08-26T12:36:06.797 に答える