У меня возникли трудности с созданием триггера, который обновляет количество зарегистрированных студентов. Вот как настроены мои таблицы. Этот первый блок кода был предоставлен моим инструктором. Всякий раз, когда студент регистрируется или удаляется, таблицу register_count необходимо обновить с соответствующим подсчетом количества студентов.SQL-триггеры в таблицах
Create table Registered
(
ssn numeric,
code char(10),
year int,
semester char(10),
foreign key (ssn) references Student(ssn),
foreign key (code) references Course(code),
primary key (ssn,code,year,semester)
);
create table Register_Count
(
code char(10),
year int,
semester char(10),
count int default 0,
primary key (code, year, semester)
);
Вот моя попытка спускового механизма до сих пор. Я продолжаю получать «множественный идентификатор, который не может быть связан ошибкой».
CREATE TRIGGER updateCount ON registered
AFTER UPDATE, DELETE, INSERT
AS
UPDATE register_count SET
code = (select code from inserted),
year = (select year from inserted),
semester = (select semester from inserted),
count = (select count(*) from registered)
WHERE Register_Count.code = inserted.code
GO
'' inserted' и deleted' столы так, что они могут представлять результаты множественных операций. Проектирование триггера в предположении, что они всегда будут содержать ровно одну строку, как правило, плохой план. Если вы абсолютно уверены, что никогда не будет больше одной строки, добавьте проверку количества строк и используйте «RaIsError», чтобы явным образом сообщить тем, кто пришел позже, что они попытались выполнить неприемлемое утверждение. ('if (выберите Count (*) из вставленного)> 1 RaIsError ('FooTable_Insert: обрабатывать не более одной строки.', 25, 42) с log') – HABO
Будет ли проблема, UPDATE', а не 'INSERT', на' register_count'? Если появляется новый «код», триггер будет эффективно игнорировать его. И 'count', который вы храните в' register_count', - это полные строки из 'register', не ограничиваясь определенным« кодом ». И 'вставленный' не очень полезный источник данных при выполнении оператора' DELETE'. Тем не менее, попробуйте традиционную технологию отладки удаления строк до тех пор, пока проблема не изменится. – HABO
Другое предложение - имена _quote_, которые соответствуют встроенным ключевым словам, функциям, .... Следовательно, столбец '[count]' явно отличается от совокупности 'count()'. – HABO