트리거를 연구 중이며 질문이 있습니다.SQL Server 2008 FOR INSERT 트리거가 작동하지 않습니다.
복잡한 시간을 변경하는 트리거를 만듭니다. weeklymeeting
|section_id| meeting type| days| timestart|timeend|class_id|
| 13 | Lecture | 5 | 01:00:00 |02:00:00|12 |
timestart
및 timeend
내가 예
위한
복잡한 시간을 확인하는 트리거를 생성하고 TIME
자료형으로하는 데이터 테이블에서
사용자 사용한다면 과 같은 검색어 515,INSERT INTO DBO.WeeklyMeetings VALUES (35, 1,1 ,'11:40:00','11:42:00', 42)
는 데이터
삽입해야하지만INSERT INTO CSE132B.DBO.WeeklyMeetings VALUES (35, 1, 1, '12:30:00','01:30:00', 42)
가
따라서 I는 시간 착체를 확인하는 트리거를 생성 복잡한 시간이기 때문에 그때는 에러 메시지를 반환한다 .. 그러나 예 :ALTER TRIGGER [dbo].[check_section_time_complex] ON [dbo].[WeeklyMeetings]
FOR INSERT AS
IF EXISTS(select * from inserted as i INNER JOIN dbo.WeeklyMeetings as m ON (i.timestart BETWEEN m.timestart and m.timeend)
OR(i.timeend BETWEEN m.timestart and m.timeend))
begin
RAISERROR ('Can not update data because section time is complexing with other section!!', 16,1);
rollback tran
end
ho wever, 그것은 정말로 작동하지 않습니다 ... 나는 그 이유를 정말로 확신하지 못합니다 ....
누구도이 방아쇠에 문제가 있음을 압니까? 당신이 FOR INSERT
트리거를 지정했기 때문에
감사
대신에 다음으로 변경되었으며 오류 메시지가 정상적으로 작동합니다. 아무런 문제가 없다면이 데이터를 삽입해야합니다. 이제는 anydata를 삽입하지 않습니다 ... –
INSTEAD OF 트리거에서 유효한 데이터 삽입을 직접 수행해야합니다. INSTEAD OF 트리거 *는 삽입 시도를 대체하므로 * 검사 후에 트리거를 명시 적으로 수행해야하는 행을 삽입하고자하는 경우. 재귀 루프 삽입으로 끝나지 않도록 조심하십시오. – kaj
다른 (약간 못 생기는) 옵션은 FOR INSERT (AFTER) 트리거를 사용하는 것이고 데이터가 유효하지 않은 경우 방금 생성 한 것임에도 불구하고 삭제하십시오 – kaj