У меня проблема при запуске хранимой процедуры sql (MSSQL 2005).Вот его код:
CREATE PROCEDURE [GetItemColors]
@FetchCount int
AS
BEGIN
SELECT
TOP (@FetchCount) item.Id as ItemId, item.Published as Published, attributeValue.String as Color
FROM tblItem item, tblAttribute attributeValue, tblAttributeDefinition attributeDef
WHERE
item.Id = attributeValue.fkItemId
AND item.Deleted = 0
AND item.PendingPublish = 0
AND attributeValue.fkAttributeDefinitionId = attributeDef.Id
AND attributeDef.[Name] = 'Color'
ORDER BY item.Published DESC
END;
Иногда выполнение процедуры заканчивается с исключением:
SqlException: Transaction (Process ID 66) was deadlocked on lock | communication buffer resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
Кто-нибудь знает, как переписать процедуру, чтобы избежать исключения?
Есть ли какие-либо таблицы предварительной блокировки в вызове хранимой процедуры, чтобы другой код не мог прервать выполнение?
Заранее спасибо за помощь!
правка 1: примерный план выполнения прилагается
![estimated execution plan](https://i.stack.imgur.com/yM5Md.png)
правка 2: я не могу получить график тупиков, поскольку исключение происходит пару раздень только в живой среде.Мне не разрешено запускать профилировщик в живом окружении.Мне не удалось воспроизвести тупик в среде разработки.
edit 3: Мне не удалось получить победителя тупика.