कृपया सुनिश्चित करें कि जिस तालिका से आप रिकॉर्ड का चयन कर रहे हैं, उस कॉलम के नाम, डेटा प्रकार और क्रम गंतव्य तालिका के समान ही हैं। केवल अंतर यह होना चाहिए कि गंतव्य तालिका में पहले स्तंभ के रूप में एक पहचान स्तंभ है, जो कि स्रोत तालिका में नहीं है।
जब मैं "INSERT INTO table_Dest SELECT * FROM table_source_linked_server_excel" निष्पादित कर रहा था, तो मैं इसी तरह के मुद्दे का सामना कर रहा था। तालिकाओं में 115 कॉलम थे।
मेरे पास दो ऐसी तालिकाएँ थीं जहाँ मैं डेटाबेस में एक्सेल (लिंक सर्वर के रूप में) से डेटा लोड कर रहा था। डेटाबेस तालिकाओं में, मैंने 'id' नामक एक पहचान कॉलम जोड़ा था जो कि स्रोत एक्सेल में नहीं था। एक तालिका के लिए क्वेरी सफलतापूर्वक चल रही थी और दूसरे में मुझे त्रुटि मिली "तालिका में पहचान स्तंभ के लिए एक स्पष्ट मूल्य केवल तब निर्दिष्ट किया जा सकता है जब एक स्तंभ सूची का उपयोग किया जाता है और IDENTITY_INSERT चालू SQL सर्वर है"। यह हैरान करने वाला था क्योंकि दोनों प्रश्नों के लिए परिदृश्य बिल्कुल समान था। इसलिए मैंने इसकी जांच की और मैंने पाया कि उस प्रश्न में जहां मुझे INSERT INTO .. के साथ त्रुटि हो रही थी .. का चयन करें:
- स्रोत तालिका में कुछ स्तंभ नाम संशोधित किए गए थे, हालांकि मान सही थे
- वास्तविक डेटा कॉलमों से परे कुछ अतिरिक्त कॉलम थे जो सेलेक्ट * द्वारा चुने जा रहे थे। मैंने स्रोत एक्सेल टेबल (लिंक्ड सर्वर के तहत) पर "स्क्रिप्ट तालिका के रूप में> चयन करें> नई क्वेरी विंडो" के विकल्प का उपयोग करके यह पता लगाया। एक्सेल में आखिरी कॉलम के ठीक बाद एक छिपा हुआ कॉलम था, हालांकि इसमें कोई डेटा नहीं था। मैंने स्रोत Excel तालिका में उस स्तंभ को हटा दिया और उसे सहेज लिया।
उपरोक्त दो बदलाव करने के बाद INSERT INTO ... SELECT * के लिए क्वेरी सफलतापूर्वक चलाई गई। गंतव्य तालिका में पहचान स्तंभ अपेक्षित रूप से प्रत्येक सम्मिलित पंक्ति के लिए पहचान मान उत्पन्न करता है।
इसलिए, भले ही गंतव्य तालिका में कोई पहचान स्तंभ हो जो स्रोत तालिका में नहीं है, INSERT INTO .. SELECT * सफलतापूर्वक चलेगा यदि स्रोत और गंतव्य में नाम, डेटा प्रकार और स्तंभ क्रम बिल्कुल समान हों।
आशा है कि यह किसी की मदद करता है।