어떻게 여러 행을 업데이트 트리거로 처리 할 수 있습니까/현재 트리거를 수정하여 현재 동작을 수행하는 방법은 무엇입니까? 나는 단지 하나의 행이 위대한 작품을 업데이트하지만 같은 시간에 여러 행을 업데이트하면 나는 오류가 발생하는 경우 :SQL 트리거 업데이트에서 여러 행 처리
Msg 512, Level 16, State 1, Procedure TriggerUpdateAdvert, Line 9
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
이 내 트리거입니다 :
ALTER TRIGGER dbo.TriggerUpdateAdvert
ON dbo.Advert FOR UPDATE
AS
DECLARE @OldStatus INT;
DECLARE @NewStatus INT;
DECLARE @ID UNIQUEIDENTIFIER;
SET @ID=(SELECT I.ID_Advert FROM INSERTED I);
PRINT @ID
SET @OldStatus=(SELECT D.Status FROM DELETED D WHERE [email protected]);
SET @NewStatus=(SELECT I.Status FROM INSERTED I WHERE [email protected]);
IF(@[email protected])
BEGIN
print @OldStatus
print @NewStatus
IF(@NewStatus=1 or @NewStatus=3)
BEGIN
UPDATE Advert SET Published_Date=GETDATE() WHERE [email protected]
END
END
GO
편집 : 내가 만든
다음 코드 :
UPDATE A
SET A.Published_Date=GETDATE()
FROM Advert A
INNER JOIN Inserted I ON A.ID_Advert=I.ID_Advert
INNER JOIN Deleted D ON D.ID_Advert=A.ID_Advert
WHERE I.Status!=D.Status AND (I.Status IN (1,3) AND D.Status NOT IN (1,3))
의견이 있으십니까?
귀하의 ** 주요 결함은 ** 트리거는 사용자가 가정 것을 호출 할 것입니다 ** 번 행 ** 당 - 그것의 **하지 **! 그것은 ** ** 한 번 명령문 **라고 불릴 것이며'Inserted' 의사 테이블은 ** 여러 행 **을 포함 할 수 있습니다 ** -이 경우 - 여러 행 중 어느 것을 여기에서 선택 하시겠습니까 ??? SET ** ID = (SELECT I.ID_ FROM INSERTED I); .... 여러 행을 고려하여 적절하게 처리하려면 트리거를 다시 작성해야합니다 **! –