Вставка на одном столе вызвала тупик - PullRequest
0 голосов
/ 14 октября 2010

Я использую SQLServer 2005 и спроектировал DAO с запущенной вставкой sql следующим образом:

INSERT INTO eventsources (recevied_event_time_stamp, recevied_event_curve_name, recevied_event_curve_value, recevied_event_quote_date, total_time_for_event_processing, number_of_published_events{0}, triggered_curve, recevied_event_day)

однако система выдает исключение мертвой блокировки через некоторое время, что мне кажется невозможным, я думаю, что тупик должен возникать только при использовании нескольких ресурсов в обратном порядке.

Вставка многопоточная, это может быть проблемой? но я использую AdoTemplate Spring.Net, который объявлен поточно-ориентированным.

Я создал триггер для таблицы источников событий

CREATE TRIGGER TRIGGER_EVENTSOURCES
ON eventsources
FOR INSERT
AS
DECLARE @newlyInertedFormulaName VARCHAR(100)
DECLARE @error_message varchar(10)
DECLARE @last_calculated_date datetime
DECLARE @timeframe datetime
DECLARE @publishedEvent int

SELECT @publishedEvent = (SELECT number_of_published_events FROM Inserted)
SELECT @newlyInertedFormulaName = (SELECT triggered_curve FROM Inserted)
SELECT @error_message = (SELECT error_message FROM Inserted)
SELECT @last_calculated_date = (SELECT recevied_event_time_stamp FROM Inserted)

if @publishedEvent > 0
BEGIN
    update formulaversions set last_calculated_date = @last_calculated_date where 

formulaname = @newlyInertedFormulaNam
e and lifecycle = 3;
END

if @error_message is not NULL
        BEGIN
                update formulaversions set status = 2 where formulaname = @newlyInertedFormulaName and lifecycle = 3;
        END
ELSE
        update formulaversions set status = 1 where formulaname = @newlyInertedFormulaName and lifecycle = 3 and (status <>
 2 or status is null);       

GO

Есть ли проблемы с использованием этого триггера?

Любые комментарии будут оценены.

1 Ответ

1 голос
/ 16 октября 2010

Основная причина - три оператора обновления в триггере, он может блокировать одну и ту же строку в разном порядке, что вызывает проблему, SQL Server Profiler очень полезен для выяснения этого.*http://msdn.microsoft.com/en-us/library/ms190465.aspx

...