Я пытаюсь написать триггер, который вставляет в таблицу журнала дату, имя таблицы, я вставил в, название операции (вставка, удаление, обновление) и количество вставки.Вставить триггер в SQL Server
Вот мой код:
CREATE TRIGGER [dbo].[Inser]
ON [dbo].[Avion]
AFTER INSERT
AS
BEGIN
DECLARE @codAv int
DECLARE @NumeAv varchar(100)
DECLARE @MotorAv varchar(100)
SELECT @codAv = INSERTED.codA FROM INSERTED
SELECT @NumeAv = INSERTED.NumeA FROM INSERTED
SELECT @MotorAv = INSERTED.Motor FROM INSERTED
SELECT @@ROWCOUNT AS INSERTED;
INSERT INTO LogM (DataM, Numele, Tipul, Numar)
VALUES(GETDATE(), 'Avion', 'Inserare', @@ROWCOUNT);
PRINT 'INSERT trigger fired.'
END
У меня есть хранимую процедуру, где у меня есть что-то вроде 20 вставки этого типа:
INSERT INTO Avion (Motor,NumeA)
VALUES ('Junkers','Focke-Wulf');
все отделены друг от друга. Когда я запускаю этот код, таблица LogM будет заполнена 20 новых строками этого типа:
5 Nov 27 2016 8:58PM Avion Inserare 1.00
Я хочу, чтобы мой курок, чтобы сосчитать все вставки, хранящиеся в процедуре, а затем вставить в LogM
только одну записи , с ROWCOUNT
не будучи 1.00
, но количество вставки я сделал в этой хранимой процедуры, и я не имею ни малейшего представления, как я могу это сделать.
спасибо.
И как сервер sql должен знать, что пришло время вставить данные в таблицу журналов? Я хотел бы предложить, чтобы chsnge логику в вашем прок и вставить все строки с помощью одного оператора –
Ваш триггер ** MAJOR ** недостаток в том, что вы, кажется, предположить, что это будет называться ** один раз в строке ** - то есть * *не тот случай. Триггер будет срабатывать ** один раз за оператор **, поэтому, если ваш оператор 'INSERT', который вызывает этот триггер для запуска вставки 25 строк, вы получите триггер, запущенный ** один раз **, но тогда псевдо-таблица' Inserted' будет содержат 25 строк. Какой из этих 25 строк будет выбран ваш код? 'ВЫБРАТЬ @codAv = INSERTED.codA FROM INSERTED' - это недетерминировано, вы получите ** один произвольный ряд **, и вы будете ** игнорируя все остальные строки **. Вам необходимо переписать триггер, чтобы учесть это –