我想要做这件事:
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)。
我想要做这件事:
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
DECLARE @HideSelectFromOutput TABLE (DoNotOutput INT); INSERT INTO @HideSelectFromOutput SELECT TOP 1 Id FROM a WITH (TABLOCK, HOLDLOCK);
- GézaBEGIN TRANSACTION
select top 1 *
from table1
with (tablock, holdlock)
-- You do lots of things here
COMMIT
这将会持有“表锁”,直到您当前的“事务”结束。
请在您的事务中使用TABLOCKX锁提示。 参见此文章 了解更多有关锁定的信息。