आपको यह त्रुटि मिलने का कारण यह है कि 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
पहले से ही... लेकिन आपने वह नहीं दिखाया।