我创建了一个简单的表并在其中插入了一些值。然后我创建了一个而不是触发器来阻止任何名为“John”的人插入一个值以及任何已经回答过问题的人。 我的问题是,当我插入新值时,查询会成功执行,但表格不会更新。
CREATE TABLE user_reponse(
Username VARCHAR(50),
QuestionID VARCHAR(10),
Answer CHAR(1)
)
INSERT INTO user_reponse VALUES
('Tom', 'Q001', 'D'), ('Wendy', 'Q009', 'A'), ('Eddy', 'Q089', 'C'), ('David', 'Q001', 'C'),
('Eve', 'Q001', 'D'), ('Paul', 'Q001', 'A'), ('Sam', 'Q001', 'B')
CREATE TRIGGER [dbo].[insert_instead_of]
ON [dbo].[user_reponse]
INSTEAD OF insert
AS
IF (SELECT Username FROM inserted) = 'John'
BEGIN
RAISERROR('You have not paid up your fee', 16, 1)
SELECT * FROM inserted
ROLLBACK
END
IF EXISTS(SELECT a.Username, b.Username FROM user_reponse a, inserted b WHERE a.Username = b.Username)
BEGIN
RAISERROR('You have already submitted this question', 16, 1)
ROLLBACK
END
INSERT INTO user_reponse VALUES
('John', 'Q001', 'D')
INSERT INTO user_reponse VALUES
('zzz', 'Q002', 'A')
SELECT * FROM user_reponse
答案 0 :(得分:0)
您正在使用INSTEAD OF
- 触发器 - 因此执行触发器而不是被忽略的插入。我认为您更愿意使用BEFORE
- 触发器来检查值,并可能在实际插入发生之前引发错误。