Я предполагаю, что у вас есть таблица с именем [RE-TNCY-TRANS]
, которая находится в базе данных [SQLViewsPro2EOD]
, и другая таблица, которая [ReTncyTransStatement]
, которая находится в базе данных [DBAdmin]
.
Я также представляю, что выхотите вставить запись в [ReTncyTransStatement]
каждый раз, когда запись вставляется в [RE-TNCY-TRANS]
.Поэтому для достижения этого вам нужно переписать свой триггер, как показано ниже:
CREATE TRIGGER AddReTncyTransStatement
ON [SQLViewsPro2EOD].[dbo].[RE-TNCY-TRANS]
AFTER UPDATE, INSERT
AS
BEGIN
INSERT INTO [DBAdmin].[dbo].[ReTncyTransStatement]
(
[ORG-CODE],
[TNCY-SYS-REF],
[TRANS-NO],
[PROGRESS-RECID]
)
SELECT [ORG-CODE],
[TNCY-SYS-REF],
[TRANS-NO],
ISNULL((
SELECT MAX([PROGRESS-RECID]) FROM [DBAdmin].[dbo].[ReTncyTransStatement]
),0) + 1 AS RECID
FROM Inserted;
END;
Обновление
Почему я использовал функцию ISNULL?
Потому что в первый раз в таблице [DBAdmin].[dbo].[ReTncyTransStatement]
нет записи, поэтому MAX([PROGRESS-RECID])
будет NULL.Я использовал ISNULL
, чтобы справиться с этой ситуацией.
Почему я использовал inserted
?
Согласно документам Microsoft:
Вставленная таблица хранит копии затронутых строк во время операторов INSERT и UPDATE.Во время транзакции вставки или обновления новые строки добавляются как во вставленную таблицу, так и в таблицу триггеров.Строки во вставленной таблице являются копиями новых строк в таблице триггеров.
Подробнее здесь: https://docs.microsoft.com/en-us/sql/relational-databases/triggers/use-the-inserted-and-deleted-tables?view=sql-server-2017