2013-01-07 10 views
8

Próbuję utworzyć wyzwalacz, aby zaktualizować dane kontaktu w repozytorium, gdy zostanie zmieniony.2 błędy: Wieloczęściowy identyfikator "inserted.name" nie może być powiązany

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 

Jestem zupełnie nowy w tym i mam to błędy:

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

Odpowiedz

15

Teraz brakuje FROM Inserted w swoim oświadczeniu UPDATE - spróbuj tego:

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 

także - po uwzględnieniu tego pseudo-tabeli, powinieneś jakoś go odnieść/dołączyć do czegoś innego ...

Aktualizacja: cóż, warto dodać dodatkową klauzulę WHERE, jeśli dodasz pseudo-tabelę Inserted do równania - co dokładnie jest całkowicie zależne od Twoich wymagań, którego nie znam - ale może to być coś jak

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

czy coś takiego (aby uniknąć iloczyn kartezjański w swoim oświadczeniu UPDATE).

+0

Dzięki, nie więcej błędów. ale czy mógłbyś bardziej szczegółowo opisać tę ostatnią część dotyczącą pseudo-stołu? –

+0

Ok, sprawdzę to. –

Powiązane problemy