2017-08-25 69 views
0

我有这个检查插入语句条件的触发器。它显示正确的消息,但它不会添加值(尽管它显示msg“成功添加”)。有谁知道问题是?为什么触发器没有向表中插入新值?

CREATE TRIGGER trg_SentMessage_Insteadof 
ON messages 
INSTEAD OF INSERT 
AS 
BEGIN 
    IF (EXISTS (SELECT inserted.* 
       FROM inserted 
       LEFT OUTER JOIN matchs AS m ON (inserted.sentFrom = m.userID1 
               AND inserted.sentTo = m.userID2) 
              OR (inserted.sentFrom = m.userID2 
               AND inserted.sentTo = m.userID1) 
       WHERE (m.interesting1 = 0 AND m.interesting2 = 0))) 
     PRINT 'Succesfully added' 
    ELSE 
    BEGIN 
     ROLLBACK TRANSACTION 
     PRINT 'You can't do that!' 
    END 
END 

例如,当我运行:

insert into messages values('2017-05-01', 'how are you', '426564774', '201827364') 

应返回“成功添加”,并将其添加到表,但只显示消息。

+6

如果您声明而不是触发器,则需要执行插入操作。无论如何,不​​需要成为一个'而不是'触发器。由于“where”,你的左连接是内连接。 –

+0

我需要where子句中的条件:\,但是你不需要代替什么?我如何检查插入的值,如果他们是我需要的? – reeena11

+1

你想'插入后'。插入后发生,但在插入完成之前发生。用'而不是'在触发器中完成什么是_触发语句要做的事情。 –

回答

1

你实际上并没有插入任何值。 INSTEAD OF INSERT可以防止发生插入,因此您必须在检查条件后自己在打印语句之前插入它们。 类似于 https://stackoverflow.com/a/27659693/6715484

+0

你的意思是我应该在if语句之后添加'Insert into messages values('','','','')'?因为它也不起作用 – reeena11