2012-02-23 11 views
0

MSSQL 2005 .Iは自動的にトランザクションが完了した後に放出されたか、ロールバックしますトランザクションの開始時にテーブルのロックを取得し、唯一のテーブルをロックオンしていたトランザクションmssql select文を使わずにテーブル全体をロックする方法は?

BEGIN TRANSACTION; 
-- get lock 
BEGIN TRY 
END TRY 
BEGIN CATCH 
    IF @@TRANCOUNT > 0 BEGIN 
     ROLLBACK TRANSACTION; 
     -- release lock 
    END 
END CATCH; 

IF @@TRANCOUNT > 0 BEGIN 
    COMMIT TRANSACTION; 
    -- release lock 
END 
GO 

の最後でそれを解放したいですか?コマンドが完了すると、あなたは追加しない限り、

UPDATE Users WITH (TABLOCK) SET Username = 'fred' WHERE Username = 'foobar' 

ロック、一般的に、(トランザクションがまだ行われていない場合でも)期限切れになります:

+0

取引処理が終了する前にフリーズしていない限り、ロックは自動的に解除されます。しかし、ヒントを特別に設定しない限り、すべてのロックがその長さで持続するわけではありません(コマンドを完了したときに解放されるロックもあります)。 – PinnyM

+0

トランザクション内でテーブルをロックする方法と、他のユーザーからの要求はどうなりますか? – Zahid

答えて

1

表ロック、またはロックの他のタイプは、そのようなヒントを使用して設定することができますそれらをトランザクションの範囲内に保つためのヒント。すべてのロックタイプとその他のテーブルヒントについては、http://msdn.microsoft.com/en-us/library/ms187373%28v=sql.90%29.aspxを参照してください。

ロックは、独自のトランザクションの分離レベルに応じて、他のユーザーに影響します。詳細はhttp://msdn.microsoft.com/en-us/library/ms173763%28v=sql.90%29.aspxを参照してください。

関連する問題