Ошибка триггера, ошибка из условия if - PullRequest
0 голосов
/ 14 марта 2012

В моем приложении данные должны вводиться через веб-интерфейс.Если я введу тот же идентификатор раздела, то должно отобразиться сообщение об ошибке.

У меня есть таблица собраний, в ней нет значения.это мой триггер

Alter trigger fourone 
On MEETING
INSTEAD OF Insert
As

IF(EXISTS(
        SELECT 
          NULL 
        FROM 
          MEETING
        WHERE EXISTS
          (
             SELECT 
               NULL 
             FROM 
               inserted 
             WHERE 
               inserted.SECTION_ID=MEETING.SECTION_ID
          )
    )
)
BEGIN
  raiserror('ERRORRRRRRRR',15,1);
END

В триггере нет ошибок.Однако, если я введу какое-либо значение, то всегда отображается сообщение об ошибке.Ребята, вы можете дать мне ответ?спасибо

Ответы [ 2 ]

2 голосов
/ 14 марта 2012

Возможно, вам не следует использовать триггер для задания, которое может быть обработано с помощью ограничения UNIQUE .Определите такое ограничение, а затем, после попытки вставки, поймайте исключение нарушения уникального ограничения и уведомите об этом пользователя соответствующим образом.

0 голосов
/ 14 марта 2012

Должен быть не вместо, а после триггера вставки.Вместо того, чтобы сообщить серверу sql, что вы собираетесь вставлять данные самостоятельно.

Ваше условие также слишком сложное:

IF EXISTS(SELECT NULL 
            FROM meetings inner join inserted 
              on inserted.SECTION_ID=MEETING.SECTION_ID
             and inserted.id <> meeting.id
          )

РЕДАКТИРОВАТЬ: исправление.В тот момент, когда запускается триггер, ваша строка уже вставлена.Вам нужно проверить наличие section_id, исключая строки во вставке.См. Исправленный код и замените идентификатор на первичный ключ таблицы собраний.Вы должны добавить откат после raiserror, иначе в собраниях останутся новые строки.

...