web-dev-qa-db-ja.com

T-SQL:テーブルを数分間手動でロックする

私はこれが奇妙であることを知っていますが、MVCアプリケーションでエラーをトリガーしたいと思います。このエラーは、テーブルから1つのレコードを取得したいLINQクエリに基づいています。このレコードは、T-SQLコマンドを使用して(データベース/テーブル/行)レベルでブロックされますが(たとえば、この1つのレコードを常に更新する無限ループ)、LINQクエリはクエリを実行してそのレコードを読み取ります。 LINQが試行する場合、結果は20〜30秒後にタイムアウトになるはずです。

24

あなたの質問を正しく理解していれば、テストのためにテーブルロックを強制したいようです。 SQL Serverでこれを行うには、目的のテーブルで排他テーブルロックを引き起こすストアドプロシージャを作成して実行できます。そのロックがアクティブになっている間、テストするプログラムを実行できます。

次のストアドプロシージャは、テーブルを2分間ロックします。ニーズに合わせて遅延パラメーターを変更できます。

BEGIN TRAN  
SELECT 1 FROM TABLE WITH (TABLOCKX)
WAITFOR DELAY '00:02:00' 
ROLLBACK TRAN   
GO 

これを行うための一般的なアプローチは、以下のstackoverflowの投稿で説明されています。 MSDNリンクは、WAITFORステートメントに関する追加情報を提供します。

元のスタックオーバーフローポスト

補足のMSDN投稿

それが役に立てば幸い。

68
Marty