我有一个简单的触发器设置,用于在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。 –
此外,我现在无法测试(这就是为什么我发布的评论,而不是答案),但我相当肯定,这将导致僵局。插入的行将因原始插入而被锁定。尝试更新锁定的记录将导致无法解析的锁链并失败,从而将所有内容都回滚。 –