2010-10-14 20 views
0

我使用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) 

然而,該系統運行一段時間,這似乎是不可能給我後引發死鎖異常,我認爲只有在以相反順序使用多個資源時纔會發生死鎖。

插入是多線程,這可能是一個問題?但我正在使用Spring.Net的AdoTemplate,它宣佈它是線程安全的。

我已經創建的eventsources表

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 

是否有使用這個觸發的任何問題的扳機?

任何意見將不勝感激。

+0

formulaversions上是否有觸發器? – 2010-10-14 11:29:08

+2

(1)如果存在多行插入,則觸發器將失敗(儘管如此,與死鎖問題無關)。 (2)您應該使用SQL Profiler來捕獲死鎖圖。 (3)這兩個表('formulaversions'和'eventsources')有哪些外鍵? – 2010-10-14 11:30:44

+0

打開服務器上的跟蹤標誌1204或1222,您應該瞭解哪些資源涉及到死鎖。 http://msdn.microsoft.com/en-us/library/ms188396.aspx – 2010-10-14 11:53:48

回答