【发布时间】:2017-05-10 22:24:54
【问题描述】:
我是 MS SQL Server 的新手,我正在尝试通过增加出现计数器 (+1) 来更新记录,如果数据丢失或者我用计数器值零“0”新插入它。
此外,我的应用程序并行运行以处理数据数组 a[] 的每个元素。当并行处理数组时,SQL Server 会抛出相同的死锁。虽然我设置了事务隔离级别,但表上发生了相同的死锁。我的应用程序是用 Java/Camel/Hibernate 编写的。
存储过程:
IF(@recordCount = 0 OR @recordCount > 1 )
BEGIN
IF(@chargeAbbreviation IS NOT NULL)
BEGIN
set transaction isolation level READ COMMITTED;
begin transaction;
UPDATE dbo.SLG_Charge_Abbreviation_Missing_Report WITH (UPDLOCK, HOLDLOCK)
SET dbo.SLG_Charge_Abbreviation_Missing_Report.Occurrence_Count+=1,dbo.SLG_Charge_Abbreviation_Missing_Report.ModifiedAt=GETDATE()
WHERE dbo.SLG_Charge_Abbreviation_Missing_Report.Jurisdiction_ID = @jurisdictionId AND
UPPER(dbo.SLG_Charge_Abbreviation_Missing_Report.Charge_Abbreviation) = @chargeAbbreviation AND
(UPPER(dbo.SLG_Charge_Abbreviation_Missing_Report.Statute_Code) = @statuteCode OR (dbo.SLG_Charge_Abbreviation_Missing_Report.Statute_Code IS NULL AND @statuteCode IS NULL)) AND
dbo.SLG_Charge_Abbreviation_Missing_Report.Product_Category_id = @productCategoryId
IF(@@ROWCOUNT = 0)
BEGIN
INSERT INTO dbo.SLG_Charge_Abbreviation_Missing_Report VALUES(@OriginalChargeAbbreviation,@jurisdictionId,@OriginalStatuteCode,@productCategoryId,GETDATE(),GETDATE(),1);
END
commit
END
SELECT TOP 0 * FROM dbo.SLG_Charge_Mapping
END
【问题讨论】:
-
可以查看wait_type信息吗?您可以从 sys.dm_exec_requests 表中获取它。
标签: java sql-server hibernate stored-procedures apache-camel