Не удалось связать многокомпонентный идентификатор "вставлен. SECTION_ID" - PullRequest
0 голосов
/ 14 марта 2012

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

У меня есть таблица MEETING с SECTION_ID. Когда я пытаюсь выполнить триггер, я получаю ошибку

    Msg 4104, Level 16, State 1, Procedure fourone, Line 7
    The multi-part identifier "inserted.SECTION_ID" could not be bound.

    Create trigger fourone
    On MEETING
    for Insert
    As

    IF( exists (select * from MEETING WHERE MEETING.SECTION_ID = inserted.SECTION_ID )) 
    BEGIN   
        raiserror('ERRORRRRRRRR',15,1);
    END

Чего мне не хватает?Ребята, вы можете дать мне какой-нибудь совет?

Ответы [ 2 ]

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

Вам нужно сослаться на вставленную таблицу в JOIN, как это:

IF( exists (select * from MEETING 
               JOIN inserted ON MEETING.SECTION_ID = inserted.SECTION_ID )) 
BEGIN
    raiserror('ERRORRRRRRRR',15,1);
END
0 голосов
/ 14 марта 2012

Оператор if должен выглядеть следующим образом:

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

В msdn говорится:

Триггеры DML используют удаленные и вставленные логические (концептуальные) таблицы.По своей структуре они аналогичны таблице, для которой определен триггер, то есть таблице, в которой выполняется пользовательское действие.Удаленные и вставленные таблицы содержат старые значения или новые значения строк, которые могут быть изменены действием пользователя.Например, чтобы получить все значения в удаленной таблице, используйте

См. Ссылку здесь

...