我試圖在名爲"Candidate_Personal_Info_Table"
的另一個表中更新記錄時,將數據插入名爲"Candidate_Post_Info_Table_ChangeLogs"
的表中。我的代碼工作正常,無論何時單個記錄更新,但當我嘗試更新多行時,它給出了錯誤:多行更新觸發器
「子查詢返回多個1值」。
以下是我的代碼:
ALTER TRIGGER [dbo].[Candidate_PostInfo_UPDATE]
ON [dbo].[Candidate_Post_Info_Table]
AFTER UPDATE
AS
BEGIN
IF @@ROWCOUNT = 0
RETURN
DECLARE @Candidate_Post_ID int
DECLARE @Candidate_ID varchar(50)
DECLARE @Action VARCHAR(50)
DECLARE @OldValue VARCHAR(MAX)
DECLARE @NewValue VARCHAR(MAX)
DECLARE @Admin_id int
IF UPDATE(Verified)
BEGIN
SET @Action = 'Changed Verification Status'
SET @Candidate_Post_ID = (Select ID From inserted)
SET @Candidate_ID = (Select Identity_Number from inserted)
SET @NewValue = (Select Verified From inserted)
SET @OldValue = (Select Verified From deleted)
IF(@NewValue != @OldValue)
BEGIN
INSERT INTO Candidate_Post_Info_Table_ChangeLogs(Candidate_Post_ID, Candidate_ID, Change_DateTime, action, NewValue, OldValue, Admin_ID)
VALUES(@Candidate_Post_ID, @Candidate_ID, GETDATE(), @Action, @NewValue, @OldValue, '1')
END
END
END
我已經搜索堆棧溢出了這個問題,但無法得到具體到這種情況下任何相關的答案。
*真的*如果您在堆棧溢出搜索與觸發的問題和SQL Server中,我」? d猜測他們中有一半人會討論這樣的事實,即你需要將'inserted'和'deleted'作爲表格*,因爲它們可以包含多行。 –
你至少有4個錯誤。如果你插入多行INSERTED表有多於一行,所以你不能寫:SET @Candidate_Post_ID =(從插入的ID中選擇ID) –