使用INSERT的值在插入触发器之后

问题描述 投票:0回答:1

我有以下查询:

INSERT INTO LOAN (MemberSSN, VolumeID, LoanDate) 
OUTPUT inserted.MemberSSN, inserted.VolumeID, inserted.LoanDate 
VALUES ('488-40-', 2, GETUTCDATE())

我想要一个触发器,该触发器插入LOAN表后,将执行以下查询-在VOLUME_VOLUME_STATUS表中插入:

INSERT INTO VOLUME_VOLUME_STATUS (VolumeID, StatusID, DateCreated) 
VALUES (>>previouslyInsertedVolumeID<<, 2, getutcdate())

如您所见,我不确定如何告诉SQL刚刚插入的VolumeID,即2

下面是我写的触发器:

CREATE TRIGGER LoanStatusUpdate_OnLoaning
AFTER INSERT
ON LOAN
BEGIN
    INSERT INTO VOLUME_VOLUME_STATUS (VolumeID, StatusID, DateCreated) 
    VALUES (>>previouslyInsertedVolumeID<<, 2, getutcdate())
END

因此,应将什么作为VolumeID列的值传递,以使该参数是激活触发器之前来自INSERT的参数?

在上一个触发器中发现了一些错误。这是语法错误已修复的代码:

CREATE TRIGGER LoanStatusUpdate_OnLoaning
ON LOAN
AFTER INSERT
AS
    INSERT INTO VOLUME_VOLUME_STATUS (VolumeID, StatusID, DateCreated) 
    VALUES (New.VolumeID, 2, getutcdate())
GO
sql-server database-trigger
1个回答
1
投票

我认为您只想使用inserted

CREATE TRIGGER LoanStatusUpdate_OnLoaning ON LOAN AFTER INSERT
BEGIN
    INSERT INTO VOLUME_VOLUME_STATUS (VolumeID, StatusID, DateCreated) 
        SELECT i.VolumeId, 2, getutcdate()
        FROM inserted i;
END;

您也可以从StatusId中拉出inserted。并且可以在DateCreated中将VOLUME_VOLUME_STATUS设置为默认值。

© www.soinside.com 2019 - 2024. All rights reserved.