Я получаю много тупиков на столе.
Это SQL Server 2005
sp, который получает ошибку, делает следующее
Delete From
EmployeeAccrualAdj
Where
EmployeeID = @iEmployeeID and
SchemeCode = @sSchemeCode and
AdjTypeCode = @sAdjTypeCode and
EffectiveDate >= @dtDateFrom
Я пытаюсь выяснить, блокирует ли база данных строку, страницу или таблицу при удалении?
Кроме того, я думаю переписать SP к
declare @ToDelete table (id int IDENTITY(1,1),
AccrualAdjID int NOT NULL)
insert into @ToDelete
SELECT
AccrualAdjID
FROM
EmployeeAccrualAdj
Where
EmployeeID = @iEmployeeID and
SchemeCode = @sSchemeCode and
AdjTypeCode = @sAdjTypeCode and
EffectiveDate >= @dtDateFrom
DECLARE @iCount int, @iMax int
SELECT
@iCount = 1, @iMax = MAX(id)
FROM
@ToDelete
declare @iAccrualAdjID int
WHILE @iCount <= @iMax
BEGIN
select @iAccrualAdjID = AccrualAdjID FROM @ToDelete WHERE id = @iCount
DELETE FROM EmployeeAccrualAdj
WHERE @iAccrualAdjID = AccrualAdjID
SET @iCOunt = @iCount + 1
END
Эффективный цикл по удаляемым строкам и удаление их по одной за раз.
Я думаю, что это не будет иметь никакого значения, если есть блокировка строки, но будет, если есть блокировка страницы или таблицы
Что вы все считаете ??