2013-01-07 9 views
8

連絡先の情報が変更されたときにリポジトリ内の情報を更新するためのトリガーを作成しようとしています。2つのエラー:複数の部分の識別子 "inserted.name"をバインドできませんでした

CREATE TRIGGER contacts_f_tr 
ON contacts_f 
AFTER UPDATE 
AS 
BEGIN 
    --- 
    ---Update repository data 
    --- 
    IF UPDATE (mail) 
    BEGIN 
     UPDATE mails 
     SET contact = inserted.name, mail = inserted.mail 
     WHERE mails.idcontact IN (SELECT mail FROM deleted) AND mails.tablecontact = 2 
    END 
END 

私はこれで非常に新たなんだ、と私はこのエラーを得た:

The multi-part identifier "INSERTED.name" could not be bound. 
The multi-part identifier "INSERTED.mail" could not be bound. 

答えて

15

あなたのUPDATE文でFROM Insertedを逃している - これ試してみてください。また

CREATE TRIGGER contacts_f_tr 
ON contacts_f 
AFTER UPDATE 
AS 
BEGIN 
    --- 
    ---Update repository data 
    --- 
    IF UPDATE (mail) 
    BEGIN 
     UPDATE mails 
     SET contact = inserted.name, mail = inserted.mail 
     FROM Inserted  <<==== add this line here! 
     WHERE mails.idcontact IN (SELECT mail FROM deleted) AND mails.tablecontact = 2 
    END 
END 

を - 一度あなたはその擬似テーブルを含めると、どういうわけかそれを参照して/他のものに参加する必要があります....

更新:よく、Inserted擬似テーブルを方程式に追加する場合は、追加のWHERE句を追加することをお勧めします。正確にはわかっていない要件に完全に依存していますが、あなたのUPDATEステートメントのデカルト積を避けるために)

WHERE mails.idcontact IN (SELECT mail FROM deleted) 
    AND mails.tablecontact = 2 
    AND mails.MailId = Inserted.MailId 

などのようなものです。

+0

ありがとう、もうエラーはありません。擬似テーブルについての最後の部分について少し詳しく説明できますか? –

+0

私はそれを調べます。 –

関連する問題