2013-01-07 11 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 

इसके अलावा - एक बार जब आप उस छद्म तालिका को शामिल कर लेते हैं, तो आपको किसी भी तरह इसका संदर्भ देना चाहिए/इसे किसी अन्य चीज़ में शामिल करना चाहिए ....

अद्यतन: अच्छी तरह से, आप कुछ अतिरिक्त WHERE खंड जोड़ना चाहेंगे यदि आप Inserted छद्म तालिका को समीकरण में जोड़ते हैं - जो वास्तव में आपकी आवश्यकताओं पर निर्भर है, जो मुझे नहीं पता - लेकिन यह कुछ हो सकता है

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

या ऐसा ही कुछ की तरह (अपने UPDATE बयान में एक कार्तीय उत्पाद से बचने के लिए)।

+0

धन्यवाद, कोई और त्रुटि नहीं। लेकिन क्या आप छद्म तालिका के बारे में उस अंतिम भाग पर थोड़ा और विस्तार कर सकते हैं? –

+0

ठीक है, मैं उसमें देख लूंगा। –

संबंधित मुद्दे