2个错误:无法绑定多部分标识符"inserted.name"

Lui*_*dor 10 sql triggers sql-server-2008

我正在尝试创建一个触发器来更新存储库中的联系人信息.

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
Run Code Online (Sandbox Code Playgroud)

我对此很新,我得到了这个错误:

The multi-part identifier "INSERTED.name" could not be bound.
The multi-part identifier "INSERTED.mail" could not be bound.
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 16

你错过了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
Run Code Online (Sandbox Code Playgroud)

此外 - 一旦你包括那个伪表,你应该以某种方式引用它/加入其他东西....

更新:好吧,WHERE如果你将Inserted伪表添加到等式中,你可能想要添加一些额外的子句- 这究竟完全取决于你的要求,我不知道 - 但它可能是类似的

WHERE mails.idcontact IN (SELECT mail FROM deleted) 
  AND mails.tablecontact = 2
  AND mails.MailId = Inserted.MailId
Run Code Online (Sandbox Code Playgroud)

或类似的东西(以避免UPDATE声明中的笛卡儿产品).