触发器创建后,SQL表未显示插入的数据

时间:2014-09-03 06:29:33

标签: sql triggers

我创建了一个简单的表并在其中插入了一些值。然后我创建了一个而不是触发器来阻止任何名为“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

1 个答案:

答案 0 :(得分:0)

您正在使用INSTEAD OF - 触发器 - 因此执行触发器而不是被忽略的插入。我认为您更愿意使用BEFORE - 触发器来检查值,并可能在实际插入发生之前引发错误。