触发条件后

时间:2013-09-02 16:25:15

标签: sql sql-server

我正在计算sql脚本,在触发器执行后,如果表中已存在两个值。 例如。

表格显示:

╔══════════════════════════════╗
║ User_name Question_ID Answer ║
╠══════════════════════════════╣
║     Tom       Q001        D  ║
║     Sam       Q002        F  ║
╚══════════════════════════════╝

如果我希望用户只能在一个问题上提交一个答案 所以,如果我插入值('Tom','Q002''A') 它会成功插入。 但是如果我插入值('Tom','Q001''A') 它将执行触发器,因为同一个用户试图回答相同的问题。

我写道:

    Create Trigger insert_question1
    on [dbo].[Questions]
    After insert
    As
    if 
    Begin
    Print 'You already answered'
    Rollback 
    End

我无法在IF之后找到条件 请帮助我:C

1 个答案:

答案 0 :(得分:1)

尝试这样的事情:

CREATE TRIGGER INSERT_QUESTION1 
ON DBO.QUESTIONS 
INSTEAD OF INSERT 
AS 
  BEGIN 
      INSERT INTO [dbo].[QUESTIONS] 
      SELECT I.[USER_NAME], 
             I.QUESTION_ID, 
             I.ANSWER 
      FROM   INSERTED I 
      WHERE  NOT EXISTS (SELECT * 
                         FROM   QUESTIONS Q 
                         WHERE   Q.QUESTION_ID = I.QUESTION_ID 
                                AND Q.USER_NAME = I.USER_NAME) 
  END 

GO 

此触发器可防止将副本插入表格中 你真的需要Print 'You already answered'吗? 如果是,只需将其添加到触发器的末尾:

IF @@ROWCOUNT = 0 
  PRINT 'You already answered'