Триггер SQL Server 2008 FOR INSERT не работает - PullRequest
0 голосов
/ 16 марта 2012

Я изучаю триггер и у меня возник вопрос.

Я создаю триггер для изменения комплекса времени.

В таблице данных weeklymeeting

|section_id| meeting type| days| timestart|timeend|class_id|
| 13       | Lecture     |   5 | 01:00:00 |02:00:00|12     |

timestart и timeend имеют тип данных TIME

Я создаю триггер, который проверяет комплекс времени

, например

, если пользователь использует запроскак

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)

тогда он должен вернуть сообщение об ошибке, потому что это комплекс времени

Поэтому ясоздал триггер для проверки временного комплекса .. но такой как

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

однако он не работает на самом деле ... я не совсем уверен, что причина ....

делаеткто-нибудь знает проблемы в этом триггере?

спасибо

1 Ответ

1 голос
/ 16 марта 2012

Если под «это не совсем работает» вы имеете в виду, что он разрешает вставку конфликтующих данных, а затем вызывает ошибку, это потому, что вы указали триггер FOR INSERT, который означает, что это происходит после данные вставлены.

Если вы хотите предотвратить вставку данных, вам нужно использовать INSTEAD OF триггер, который происходит за до вставки, и внутри, который выполняет вставку самостоятельно, если она действительна.

См. http://msdn.microsoft.com/en-us/library/ms189799.aspx для определения триггера.

Если ошибка является чем-то другим, опишите ее более подробно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...