我有一個簡單的觸發器設置,用於在UnitAGA
表中插入記錄時將記錄插入RentJournal
表中。使用觸發器在另一個表中插入記錄,並將該ID寫回原始記錄..?
RentJournal
表的主鍵ID列名爲RentJournalID
,它是自動遞增的。 UnitAGA
表還具有名爲RentJournalID
的可爲空的外鍵列,該列將每個UnitAGA
條目鏈接到RentJournal
表中的相應條目(通過下面的觸發器插入)。
問題是,目前這個觸發器只是將值插入到RentJournal
表中。但是現在我想通過這個觸發器獲取爲每個RentJournal
條目分配的ID,並將其寫入相應的UnitAGA
記錄中,其記錄首先實際觸發了觸發器。我該怎麼做呢 ?
的觸發代碼的,現在是這樣的:
USE [RentDB]
GO
ALTER TRIGGER [RTS].[InsertRentJournalEntry]
ON [RTS].[UnitAGA]
AFTER INSERT
AS
BEGIN
INSERT INTO RTS.RentJournal
(UnitId, AdjustmentType, EffectiveDate, ReferenceFormNo)
SELECT
UnitId, 'AGA', EffectiveDate, ReferenceFormNo FROM inserted
END
對不起,忘了你不能更新邏輯表。仍然這應該工作:'更新RTS.UnitAga設置RentJournalId = @@ IDENTITY其中UnitId =(從插入選擇UnitUd)' –
@@ IDENTITY因競爭條件問題而臭名昭着,因爲它返回範圍的最後一個值REGARDLESS。換句話說,您不能保證返回在觸發器的事務上下文中插入的值。您將不得不使用SCOPE_IDENTITY。 –
此外,我現在無法測試(這就是爲什麼我發佈的評論,而不是答案),但我相當肯定,這將導致僵局。插入的行將因原始插入而被鎖定。嘗試更新鎖定的記錄將導致無法解析的鎖鏈並失敗,從而將所有內容都回滾。 –