2013-09-12 2 views
0

Я должен создать после триггера. (СТРОГО ТОЛЬКО ПОСЛЕ ТОГО ТРИГГЕРА). Я думаю, что нахожусь на правильном пути, но, похоже, не могу заставить его нормально работать. Кажется, что он всегда запускает триггер и отображает сообщение об ошибке во всех операторах вставки, а не только в том случае, когда есть дубликат. Это то, что у меня есть;Условный после триггера

CREATE TRIGGER Copies 
    ON table 
    AFTER INSERT 

    AS 
    Declare @number int 
    Set @number = (Select Count(*) from inserted) 

    If @number >0 
     (
     SELECT * 
     FROM table O 
     JOIN inserted AS i 
     ON t.q_id = i.q_id 

     WHERE O.username = i.username 
     AND t.q_id = i.q_id 
     ) 

    BEGIN 
      RAISERROR ('Already answered', 16, 1); 
      ROLLBACK TRANSACTION; 
      RETURN 
    END; 
    GO 

Ps. Пожалуйста, не отвечайте на триггеры. Спасибо :)

+0

Простой комментарий, где т быть псевдонимом? –

+0

Также почему вы не получаете ошибку при попытке использовать() для инкапсуляции условных операторов ... Не должно быть IF (@Number> 0) BEGIN .... END ELSE BEGIN rolbackcode здесь END –

+0

К сожалению, SELECT * FROM table O - этот O должен быть t ВСТРОЕН ВХОД AS i изменил его в моем скрипте. нет разницы:/ – james431

ответ

0
If (NOT EXISTS(..code to test for existance)) 
BEGIN  
      RAISERROR ('Already answered', 16, 1); 
      ROLLBACK TRANSACTION; 
      RETURN 
END 
+0

При этом принимаются все заявления о вставке:/ – james431

+0

Любые дополнительные идеи? – james431

0

попробовать этот новый триггер с помощью count

CREATE TRIGGER Copies 
ON table 
AFTER INSERT 

AS 
DECLARE @Counter int 
SELECT @Counter = COUNT(*) 
FROM table T 
JOIN inserted AS i 
    ON T.username = i.username 
    AND t.q_id = i.q_id 
GROUP BY T.username, t.q_id 

If (@Counter > 1) 
BEGIN 
     RAISERROR ('Already answered', 16, 1); 
     ROLLBACK TRANSACTION; 
     RETURN 
END; 
GO 
+0

та же проблема, получите это сообщение, даже если инструкция insert имеет уникальные данные. Msg 50000, уровень 16, состояние 1, порядковые копии, строка 19 Уже ответили Msg 3609, уровень 16, состояние 1, строка 2 Сделка завершена триггером. Партия была прервана. – james431

+0

К сожалению, такой же проблема. Данные уникальны и по-прежнему вызывают триггер. :( – james431

+0

Вы бросаете и создаете триггер каждый раз? –

Смежные вопросы