2013-02-07 8 views
6

बाध्य नहीं किया जा सकता है मैं 2 टेबल है:एसक्यूएल अद्यतन तालिका सेट बहु-भाग पहचानकर्ता

  • Table1 = गैस स्टेशनों के नाम (जोड़ों में)
  • तालिका 2 = सह है तालमेल की जानकारी (देशांतर और अन्य बातों के साथ अक्षांश)

Table1 का उदाहरण:

StationID1 StationID2 Name1 Name2 Lattitude1 Longitude1 Lattitude2 Longitude2 Distance 
------------------------------------------------------------------------------------------------ 
93353477 52452 FOO  BAR  NULL  NULL  NULL NULL NULL 
93353527 52452 HENRY BENNY NULL  NULL  NULL NULL NULL 
93353551 52452 GALE SAM  NULL  NULL  NULL NULL NULL 

का उदाहरण तालिका 2:

IDInfo  Name Lattitude Longitude 
------------------------------------------- 
93353477 BAR 37.929654 -87.029622 

मैं जानकारी जो tableA में रहता समन्वय के साथ इस तालिका को अपडेट करना चाहते। मैं प्रति SQL Server 2005: The multi-part identifier … could not be bound

update table1 
set t1.[Lattitude1] = t2.[Lattitude] 
from table1 t1 
left join table2 t2 
on (t1.StationID1 = t2.IDInfo) 

मैं निम्न त्रुटि संदेश मिलता है, जैसा कि नीचे करने की कोशिश की:

संदेश 4104, स्तर 16, राज्य 1, पंक्ति 1
बहु-भाग पहचानकर्ता "t1 । अक्षांश 1 "बाध्य नहीं हो सका।

हालांकि, अगर मैं निम्नलिखित करता हूं तो यह काम करता है जिसे मैं किसी अन्य तालिका में स्टोर कर सकता हूं।

SELECT t1.[StationID1] 
     ,t1.[StationID2] 
     ,t1.[Name1] 
     ,t1.[Name2] 
     ,t2.[Lattitude] AS [Lattitude1] 
     ,t2.[Longitude] AS [Longitude1] 
     ,t3.[Lattitude] AS [Lattitude2] 
     ,t3.[Longitude] AS [Longitude2] 
from table1 t1 
left join table2 t2 
on (t1.StationID1 = t2.IDInfo) 
left join table2 t3 
on (t1.StationID2 = t2.IDInfo) 

मैं बहुत एसक्यूएल करने के लिए नया हूँ और एक कठिन समय क्यों कुछ चीजें काम करते हैं और दूसरों को नहीं समझ हो रहा है। मेरे प्रारंभिक प्रश्न के ऊपर पोस्ट किए गए लिंक के आधार पर काम करना चाहिए था - नहीं? शायद मैं सीधे सोच नहीं रहा क्योंकि मैंने कोशिश करने में कई घंटे बिताए हैं और मुझे अंत में एक सहकर्मी से मदद मिली (उसने ऊपर बताए गए दृष्टिकोण का सुझाव दिया)।

उत्तर

12

मुझे लगता है कि आप UPDATE लाइन में तालिका उपनाम को संदर्भित करने के लिए अपने अद्यतन विवरण को संशोधित कर सकते हैं।

update t1 
set t1.[Lattitude1] = t2.[Lattitude] 
from table1 t1 
left join table2 t2 
on (t1.StationID1 = t2.IDInfo) 
+0

फोरम क्लॉज में उपनाम या दोहराना तालिका 1 का उपयोग न करने के लिए बेहतर: टेबल 1 से सेट करें तालिका 1 सेट lattitude1 = table2। Table2 से अक्षांश जहां table2.IDInfo = table1.StationID1। एसक्यूएल सर्वर का "अद्यतन ... से" निर्माण गैर-मानक है - खासकर जब उपनाम का उपयोग किया जाता है - थोड़ा रहस्यमय। यदि FROM क्लॉज में कोई तालिका या उपनाम नाम अद्यतन करता है जो UPDATE के बाद आता है, तो उन तालिकाओं को जादुई रूप से पहचाना जाता है, लेकिन यदि कोई दूरस्थ क्वेरी शामिल है तो यह तोड़ सकता है (अद्यतन के लिए सहायता देखें .. से, और http://bit.ly/14EXoZP)। –

+0

@cgatian, bobs - आपकी मदद के लिए बहुत बहुत धन्यवाद। आपके दोनों समाधान काम करते थे। मैंने समस्या का उल्लेख किया है स्टीव कास ने बस मामले में उल्लेख किया है। आप सभी को धन्यवाद। – codingknob

0

आपको आंतरिक तालिका को बदलने और समान कॉलम को अलग-अलग उपनाम देने की आवश्यकता है। यह काम करना चाहिए।

update table1 
set [Lattitude1] = x.[lat] 
from 
(
    SELECT IDInfo [id], Lattitude [lat] FROM 
    table2 
) x 
WHERE 
StationID1 = x.[id] 

अपने विशेष मामले में अक्षांश Lattitude नाम बदलने के लिए अपने आवश्यक नहीं है, लेकिन अगर आप अंत में ही साथ एक मेज को अद्यतन करने और अपने आप स्तंभों अलग-अलग नाम देने के लिए मजबूर है, यह आप सड़क के नीचे सिर दर्द की बचत होगी।

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