2016-08-09 6 views
-1

Я пытаюсь создать триггер, который срабатывает только тогда, когда вставленная фамилия в таблицу классов не соответствует последним именам, указанным в таблице тренеров.Сбой SQL Server с использованием Inner join

Вот что у меня есть, но это, кажется, не будет стрелять, независимо от того, что вставляется в таблицу .:

CREATE TRIGGER CoachValidate 
ON CLASSES 
FOR INSERT, UPDATE 
AS 
BEGIN 
    IF exists (SELECT * 
       FROM inserted i 
       INNER JOIN COACHES c ON i.lastname <> c.lastname) 
     RAISERROR('INVAILD COACH', 10, 0) 
     ROLLBACK 
END 

Может кто-то помочь мне найти ошибку?

+0

Вы не можете запросить таблицу, в которой включен ваш триггер. – Uueerdo

+0

Вы не присоединяетесь к таблице 'choaches'. Вы присоединяетесь к таблице 'classes' против самого себя –

+0

@juergend oh crap Я вернулся и исправил эту проблему, но я все равно получаю ту же ошибку – th65

ответ

1

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

alter table coaches add constraint unq_coaches_name unique (lastname); 

alter table classes add constraint fk_classes_lastname 
    foreign key (lastname) references coaches(lastname); 

Там нет необходимости копировать в триггере, что база данных уже делает для вас.