После вставки триггера с использованием значений из INSERT - PullRequest
0 голосов
/ 26 мая 2020

У меня есть следующий запрос:

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

Мне нужен триггер, который при вставке в таблицу LOAN выполнял следующий запрос - INSERT в таблицу 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

1 Ответ

1 голос
/ 26 мая 2020

Я думаю, вы просто хотите использовать 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.

...