У меня есть триггер на моей базе данных, которая предотвращает конкретный пользователь от ввода и останавливает пользователь от входа тот же вопроса дважды:Вместо вставки триггера не выполняется, если оператор corectly
create trigger [dbo].[question]
on [dbo].[Online_Questions]
instead of insert
as
if SYSTEM_USER = 'John'
begin
raiserror('You have not paid up your fee',16,1)
rollback transaction
end
if exists(select 1
from Online_Questions a, inserted b where a.UserName = b.UserName
and a.Question_ID = b.Question_ID)
begin
raiserror('You have already submitted this question',16,1)
rollback
end
go
Он успешно предотвращает Джон от входа , но он не позволяет любому войти дважды, независимо от Question_ID.
Например:
execute as login = 'Tom';
insert into Online_Questions (UserName, Question_ID, Answer)
values (user, 'Q097', 'D');
, а затем
insert into Online_Questions (UserName, Question_ID, Answer)
values (user, 'Q087', 'D');
возвратит ошибку как триггер предотвратило вставку.
Я не понимаю, почему это так, поскольку инструкция if проверяет наличие имени пользователя и question_ID?
Любые предложения?
попытайтесь изменить этот триггер для триггера после запуска, у меня есть проблема, подобная этому несколько недель назад, но я не могу вспомнить, что это была проблема. Поскольку вы используете откат внутри статута, это не будет проблемой после триггера. – FpontoDesenv
@FpontoDesenv Мне нужно использовать триггер insert (это требование), поэтому, к сожалению, я не могу попробовать после запуска. – James
@AaronBertrand. Я думал, что уже смотрел на это, когда я сопоставлял значения, вставленные в те, стол? – James