2012-03-14 11 views
0

私のアプリケーションでは、Webインターフェースを使用してデータを入力する必要があります。同じセクションIDを入力すると、エラーメッセージが表示されます。トリガーエラー、条件からのエラー

私はミーティングテーブルを持っていますが、テーブルに値はありません。 これは私のトリガー

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 
     ) 

EDIT:補正。トリガーが呼び出されると、あなたはすでに行が挿入されています。挿入された行を除くsection_idの存在をテストする必要があります。改訂されたコードを参照し、IDを会議テーブルの主キーに置き換えます。 raiserrorの後にロールバックを追加すると、新しい行が会議に残ります。

+0

ありがとうございました。それでも同じエラーが発生します。私はこのように変更します。(EXISTS(SELECT * FROM MEETING2 AS Mは内部結合がI.SECTION_ID = M.SECTION_IDに挿入されています) BEGIN PRINT( 'ERRRRRRR') END –

+0

私は自分の回答を修正しました。 –

+0

- ありがとうございます。私はエラーを修正:)) –

2

おそらく、UNIQUE constraintで処理できるジョブにトリガを使用しないでください。そのような制約を定義し、挿入の試行後に一意制約に違反する例外をキャッチし、それに応じてユーザーに通知します。