1
로그 테이블에 날짜, 삽입 된 테이블의 이름, 작업 이름 (삽입, 삭제, 업데이트) 및 삽입 횟수를 삽입하는 트리거를 작성하려고합니다.SQL 서버에 트리거 삽입
INSERT INTO Avion (Motor,NumeA)
VALUES ('Junkers','Focke-Wulf');
모두 서로 분리 :이 유형의 20 삽입과 같은이 어디 저장 프로 시저를
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
:
여기 내 코드입니다.
5 Nov 27 2016 8:58PM Avion Inserare 1.00
I 프로 시저에 저장된 모든 삽입을 계산하는 내 트리거를 만들고 싶어
는 다음 LogM
하나 개의 항목에 삽입 : 그 코드를 실행하면 테이블 LogM이 유형의 20 새 행으로 채워집니다 , ROWCOUNT
은 1.00
이 아니지만이 저장 프로 시저에서 삽입 한 횟수는 얼마이며 어떻게 할 수 있는지 알지 못합니다.
감사합니다.
그리고 logm 테이블에 데이터를 삽입 할 시간을 SQL Server가 알아야합니다. 귀하의 proc에 논리를 chsnge하고 하나의 문장으로 모든 행을 삽입하는 것이 좋습니다 –
귀하의 방아쇠는 ** 당신이 그것이 행 ** 당 한 번 ** 호출 될 거라는 가정에있는 것으로 보이는 결함 - ** * * ** 사건이 아닙니다. 트리거는 ** 명령문 ** 당 한 번 실행됩니다. 따라서이 트리거로 인해 발생하는 INSERT 문이 25 개의 행을 삽입하면 ** 한 번 ** 트리거가 발생하지만'Inserted' 의사 테이블은 25 개의 행을 포함합니다. 다음 25 개의 행 중 어느 것이 귀하의 코드에서 선택됩니까? 'SELECT @codAv = INSERTED.codA FROM INSERTED' - 비 결정적입니다. ** 임의의 한 행을 ** 얻을 것이며 ** 모든 다른 행은 무시할 것입니다 **. 이를 고려하려면 트리거를 다시 작성해야합니다. –