1
我想寫一個觸發器,它在日誌表中插入日期,插入的表的名稱,操作的名稱(插入,刪除,更新)和插入次數。在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');
都彼此分開。當我運行的代碼,表10gm的將這種類型的20個新行填充:
5 Nov 27 2016 8:58PM Avion Inserare 1.00
我想讓我的觸發計數存儲在一個過程中的所有廣告,然後在LogM
只有一個條目插入,ROWCOUNT
不是1.00
,但是我在該存儲過程中所做的插入次數,我不知道該怎麼做。
謝謝。
以及sql服務器應該如何知道是時候將數據插入到logm表中了?我建議chsnge在你的過程中的邏輯和插入所有行的一個語句 –
您的觸發器有**主要**缺陷,你似乎認爲它會被稱爲**每行一次** - 這是* *不是**的情況。觸發器將在每個語句**觸發一次**,所以如果你的引發這個觸發器觸發的INSERT語句插入了25行,你將觸發**觸發**一次,但是隨後插入的僞表將會包含25行。您的代碼在這25行中選擇哪一個? 'SELECT @codAv = INSERTED.codA FROM INSERTED' - 它是非確定性的,你將得到**一個任意的行**,你將**忽略所有其他行**。你需要重寫你的觸發器來考慮這一點 –