私はこれをやりたい:
create procedure A as
lock table a
-- do some stuff unrelated to a to prepare to update a
-- update a
unlock table a
return table b
そのようなことは可能ですか?
最終的に、SQL ServerレポートサービスレポートでプロシージャAを呼び出し、プロシージャが終了した後にのみテーブルaを表示するようにします。 (テーブルAを返すようにプロシージャAを変更することはできません)。
私自身と David Moye提供のリンク からこの回答が必要で、これを決定し、同じ質問を持つ他の人に役立つかもしれないと考えました:
CREATE PROCEDURE ...
AS
BEGIN
BEGIN TRANSACTION
-- lock table "a" till end of transaction
SELECT ...
FROM a
WITH (TABLOCK, HOLDLOCK)
WHERE ...
-- do some other stuff (including inserting/updating table "a")
-- release lock
COMMIT TRANSACTION
END
トランザクションにTABLOCKXロックヒントを使用します。 この記事を参照 ロックの詳細については。
BEGIN TRANSACTION
select top 1 *
from table1
with (tablock, holdlock)
-- You do lots of things here
COMMIT
これにより、現在の「トランザクション」が終了するまで「テーブルロック」が保持されます。