【问题标题】:After Insert Trigger using the values from the INSERT使用 INSERT 中的值插入触发器后
【发布时间】:2020-05-26 15:30:52
【问题描述】:

我有以下疑问:

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】:

    我想你只是想使用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;
    

    您也可以从inserted 中提取StatusId。而DateCreated 可以在VOLUME_VOLUME_STATUS 中设置为默认值。

    【讨论】:

    • 感谢您的回答!但是,在我的第一个示例中,我提供了错误的语法,虽然您的答案非常有用,但它给了我这个错误:Incorrect syntax near 'AFTER'.
    • 尽管如此,我还是会尝试使其适应 SQL Server 语法!
    • @Questieme 。 . .我只是复制了那部分代码,因为它似乎不相关。 ONAFTER 之前。
    • 非常感谢您的帮助!冷却时间结束后,我会接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 2021-12-24
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 2016-01-27
    • 2013-05-20
    相关资源
    最近更新 更多