2014-04-14 2 views
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 

라고 한 후 다른 열에서 삽입물의 시간 전에 어디는 행을 업데이트하고 싶지만 그것은 아니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 당신이 그것에 일치하는 레코드를 업데이트하려고하는 경우

+0

내가 당신의'WHERE' 절에'AND table2.ID = i.ID'의 효과에 무언가를 추가 할 필요가 무엇인지 당신은'ta에 대한 프라이 머리 키 컬럼 값을 보장해야한다. ble2'는'inserted '에 의해 참조되는 트리거를 활성화시킨 하나의 레코드와 일치해야합니다. –

답변

0

코드에서 테이블을 보면

UPDATE [db2].[dbo].[table2] 
SET 
.... 
FROM inserted i 
inner join jobmst jm on jm.jobmst_id = i.jobmst_id 
where jm.jobmst_alias = 'blah' 

당신은 FROM 절에서 표 2 없어야합니다.

그렇지 않으면 당신은

그것은 볼 어렵 다시 삽입 jobmst 테이블에서 일부 레코드를 받고

이유가 어쨌든 작동하지 않는 것 즉, 표 2에서 모든 레코드에 그 중 하나의 값을 발사하고 확실히 당신이 구현하려는 논리는하지만, 이것은 당신이 의미

UPDATE t2 
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 
inner join [db2].[dbo].[table2] t2 ON t2.baseEnd <= i.jobrun_time 
where jm.jobmst_alias = 'blah' 
관련 문제