2014-09-03 68 views
1

我已經創建了一個簡單的表並向其中插入了一些值。然後,我創建了一個觸發器來阻止任何名爲'John'的人插入一個值,並且還有人已經回答了這個問題。 我的問題是,當我插入新值時,查詢成功執行,但表不會更新。觸發器創建後SQL表不顯示插入的數據

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 
+2

使用'插入更新後' – 2014-09-03 06:38:33

+0

您是否在說'sql',你的意思是微軟'sql-server'?請更新您的標籤以包含您正在使用的**實際,具體數據庫** - 「sql」僅僅是查詢語言,由許多RDBMS使用 - 但觸發器是高度特定於供應商的,因此我們需要知道具體您正在使用 – 2014-09-03 06:42:47

+0

解決數據庫系統 - 我需要添加一個ELSE statment後的IF插入ELSE \t \t插入的行BEGIN \t \t INSERT INTO user_reponse \t \t SELECT * FROM插入 \t END – 2014-09-03 07:19:20

回答

0

你正在使用一個INSTEAD OF觸發器 - 所以觸發器被執行而不是插入被忽略。我想你寧願要一個BEFORE-觸發器來檢查值,並可能在實際插入發生之前引發錯誤。