2017-08-25 25 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

相關問題