0
다음과 같은 트리거가 나를 슬픔의 원인으로 만듭니다.SQL Server : 트리거가 없으면 업데이트하십시오.
ALTER TRIGGER [dbo].[T_DMS_Factory_I]
ON [dbo].[jobrun]
AFTER INSERT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
IF NOT EXISTS (select * from inserted i
inner join [db2].[dbo].[table2] t2 on t2.JobRunID = i.jobrun_id)
UPDATE [db2].[dbo].[table2]
SET ProdDt = i.jobrun_proddt,
CreateDt = GETDATE(),
JobrunID = i.jobrun_id,
Start = i.jobrun_time,
End = i.jobrun_stachgtm,
Status = i.jobrun_status,
ActiveDuration = i.jobrun_duration,
TotalDuration = i.jobrun_duration
FROM inserted i
INNER JOIN jobmst jm ON jm.jobmst_id = i.jobmst_id
WHERE jm.jobmst_alias = 'blah'
END
위 작업은 정상적으로 작동하지만 원하지 않는 동일한 데이터로 모든 행을 업데이트합니다. 난 단지 시간이 나는 일을해야 상상했던 것과 즉 baseEnd
WHERE jm.jobmst_alias = 'blah' AND baseEnd <= i.jobrun_time AND JobRunID IS NOT NULL
라고 한 후 다른 열에서 삽입물의 시간 전에 어디는 행을 업데이트하고 싶지만 그것은 아니다. 내가 도대체 뭘 잘못하고있는 겁니까? 당신이 그것에 일치하는 레코드를 업데이트하려고하는 경우
내가 당신의'WHERE' 절에'AND table2.ID = i.ID'의 효과에 무언가를 추가 할 필요가 무엇인지 당신은'ta에 대한 프라이 머리 키 컬럼 값을 보장해야한다. ble2'는'inserted '에 의해 참조되는 트리거를 활성화시킨 하나의 레코드와 일치해야합니다. –