2012-03-14 38 views
0

在我的應用程序中,應該使用Web界面輸入數據。如果我輸入相同的部分ID,則應顯示錯誤消息。觸發錯誤,錯誤來自if條件

我有一個會議桌,表中沒有任何值。 這是我的觸發

Alter trigger fourone 
On MEETING 
INSTEAD OF Insert 
As 

IF(EXISTS(
     SELECT 
      NULL 
     FROM 
      MEETING 
     WHERE EXISTS 
      (
      SELECT 
       NULL 
      FROM 
       inserted 
      WHERE 
       inserted.SECTION_ID=MEETING.SECTION_ID 
     ) 
    ) 
) 
BEGIN 
    raiserror('ERRORRRRRRRR',15,1); 
END 

有一個在觸發任何錯誤。 但是,如果我輸入任何值,那麼它總是顯示錯誤消息。 你們可以給我答案嗎? 謝謝

回答

0

它應該不是,而是在插入觸發後。而不是告訴sql server你要自己插入數據。

你的條件也過於複雜:

IF EXISTS(SELECT NULL 
      FROM meetings inner join inserted 
       on inserted.SECTION_ID=MEETING.SECTION_ID 
      and inserted.id <> meeting.id 
     ) 

編輯:校正。在觸發器被調用的時候,你已經插入了行。您需要測試是否存在插入的行中的section_id。查看修改後的代碼並用會議表的主鍵替換ID。您應該在raiserror之後添加回滾,否則新行將保留在會議中。

+0

謝謝你的回答。它仍然有相同的錯誤。我改變它是這樣的IF(EXISTS(SELECT * FROM MEETING2 AS M內部連接插入I I上I.SECTION_ID = M.SECTION_ID)) BEGIN PRINT('ERRRRRRR') END – 2012-03-14 10:30:15

+0

我已更正我的迴應。 – 2012-03-14 10:55:04

+0

- 謝謝。我修正了錯誤:)) – 2012-03-14 11:16:16

2

也許你不應該使用觸發器來處理可由UNIQUE constraint處理的作業。定義這樣的約束,然後在插入嘗試後,捕獲違反唯一約束的異常並相應地通知用戶。