Je reçois beaucoup de deadlocks sur une table. Il est SQL Server 2005Comment puis-je connaître le type de verrouillage d'une table?
sp qui devient l'erreur effectue les opérations suivantes
Delete From
EmployeeAccrualAdj
Where
EmployeeID = @iEmployeeID and
SchemeCode = @sSchemeCode and
AdjTypeCode = @sAdjTypeCode and
EffectiveDate >= @dtDateFrom
Je suis en train de travailler si la base de données est en train de faire la ligne, la page ou le verrouillage de table lors de la suppression?
Aussi, je pense à récrire 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
boucle effectivly à travers les lignes à supprimer et de les supprimer un à la fois.
Je pense que cela ne fera aucune différence s'il y a un verrouillage de ligne, mais le fera s'il y a un verrouillage de page ou de table Qu'est-ce que vous pensez tous?
Le message d'erreur que nous recevons est La transaction (ID de processus 51) a été bloquée au verrouillage | ressources de tampon de communication avec un autre processus et a été choisi comme victime de l'impasse. Réexécutez la transaction. (Erreur lors de l'exécution de la procédure stockée: Employee_AccrualAdjustments_Delete @iEmployeeID = 510337, @sSchemeCode = '' SAH '', @sAdjTypeCode = '' A '', @dtDateFrom = '' 2008-09-20T00: 00: 00 '') ' –