15

変更されたときにリポジトリ内の連絡先情報を更新するトリガーを作成しようとしています。

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.
4

1 に答える 1

24

ステートメントにがありません- これを試してFROM Insertedください:UPDATE

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

また、その疑似テーブルを含めたら、何らかの方法でそれを参照するか、別のものに結合する必要があります....

更新:まあ、疑似テーブルを方程式WHEREに追加する場合は、いくつかの句を追加することをお勧めしますInserted-それが正確に何であるかは、私にはわかりませんが、要件に完全に依存します-しかし、それは次のようなものになる可能性があります

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

またはそのようなもの(UPDATEステートメントでデカルト積を避けるため)。

于 2013-01-07T19:55:58.803 に答える