【发布时间】:2014-09-03 15:18:00
【问题描述】:
我创建了一个简单的表并在其中插入了一些值。然后我创建了一个代替触发器来阻止任何名为“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
【问题讨论】:
-
使用
After insert update -
你是说
sql,你真的是指微软sql-server??请更新您的标签以包含您正在使用的实际、具体的数据库 -sql只是许多 RDBMS 使用的查询语言 - 但触发器是高度特定于供应商的,因此我们需要知道你正在使用什么具体的数据库系统 -
已解决 - 我需要在 IF 之后添加一个 ELSE 语句来插入插入的行 ELSE BEGIN INSERT INTO user_reponse SELECT * FROM inserted END