【发布时间】:2011-05-10 20:30:41
【问题描述】:
我希望在我的存储过程中避免并发性
这是我的脚本,我正在尝试 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
ALTER proc [dbo].[SP_GenerateNextReportID]
@type nvarchar(255), @identity int output
AS BEGIN
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
declare @id int;
set @id = IsNull((select LastUsedIdentity from ReportProcessGenerator where Type = @type), 0)
if(@id =0)
insert ReportProcessGenerator values(@type, @id +1)
else
update ReportProcessGenerator set LastUsedIdentity = @id +1 where Type = @type
set @identity = @id +1
END
不确定这是否正确?
【问题讨论】:
-
我认为这会容易出现死锁。没有什么可以阻止两个并发事务都执行
SELECT然后互相阻止进一步进行。这里有几种方法stackoverflow.com/questions/3453411/…
标签: sql-server sql-server-2005