Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एक कॉलम से दूसरी टेबल में डेटा कैसे डालें

आपको यह त्रुटि मिलने का कारण यह है कि admin_id NULLABLE नहीं है मतलब आपको जरूरी एक admin_id है हर पंक्ति के लिए। जब आप INSERT करते हैं आपको स्पष्ट रूप से admin_id डालना होगा चूंकि यह IDENTITY नहीं है संपत्ति स्तंभ।

आपके अपेक्षित परिणाम दर्शाते हैं कि आप एक UPDATE करना चाहते हैं , न कि INSERT . एक UPDATE UPDATEहोगा admin_id वर्तमान में आपके table_admin . में नई पंक्तियों को सम्मिलित करने के बजाय तालिका। एक बात जो स्पष्ट नहीं है वह यह है कि table_admin table_information . से संबंधित है . जॉन को कैसे सौंपा जाता है admin_id = 1 ?

एक बार जब आप इसे परिभाषित कर लेते हैं, तो यह UPDATE है

update t 
set t.admin_name = i.admin_name
from table_admin t
inner join table_information i on i.someColumn = t.someColumn

अगर आपको परवाह नहीं है कि कौन सा admin_name क्या मिलता है admin_id , तो आप एक सरोगेट कुंजी बना सकते हैं और अपनी तालिका अपडेट कर सकते हैं। यह इस तरह दिखेगा:

select distinct 
    admin_name
    ,admin_id = row_number() over (order by (select null))
into #tempInformation
from table_information

--this is going to show the admin_id that will be updated in the table_admin table
select * from #tempInformation

update t 
set t.admin_name = i.admin_name
from table_admin t
inner join #tempInformation i on i.admin_id = t.admin_id

संपादित करें

अगर आपके पास कोई नहीं है admin_name वर्तमान में table_admin . में आबाद है तो मेरा सुझाव है कि आप बस उस तालिका को छोटा कर दें और अपना विशिष्ट admin_name डालें . दोबारा, मैं admin_id भी बनाउंगा एक पहचान संपत्ति

truncate table table_admin

insert into table_admin (admin_id, admin_name)
   select distinct 
        admin_id = row_number() over (order by (select null))
        ,admin_name

मुझे इस बात पर प्रकाश डालना चाहिए कि अधिकांश स्कीमाओं में, admin_id कुछ मतलब होगा। यह एक PRIMARY KEY होगी इस तालिका के लिए और डेटाबेस में इस तालिका को अन्य लोगों से जोड़ने के लिए उपयोग किया जाता है। इस प्रकार, न जाने कौन सा admin_id जिस पर जाता है admin_name इसका मतलब है कि आपके हाथों में एक वास्तविक गड़बड़ी है और उन्हें यादृच्छिक रूप से असाइन करना चाहिए डाउनस्ट्रीम प्रक्रियाओं को तोड़ें ... लेकिन ऐसा नहीं हो सकता है क्योंकि आप इसे शुरू करने के लिए नहीं रख रहे हैं।

मैं पूछूंगा क्यों? यह आपको संकेत देगा कि आपके पास admin_name . की मैपिंग है करने के लिए admin_id पहले से ही... लेकिन आपने वह नहीं दिखाया।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या क्लॉज से या जहां क्लॉज में समान रूप से शामिल होना बेहतर है?

  2. संग्रहीत कार्यविधि के पैरामीटर नाम खोजें

  3. क्या क्लस्टर इंडेक्स अद्वितीय होना चाहिए?

  4. आप Microsoft SQL सर्वर में अनुक्रम कैसे लागू करेंगे?

  5. Sql सर्वर सेवा ब्रोकर वार्तालाप समूह