我是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表中得到它。 –