2012-03-21 16 views
8

आयात करते समय डेटा प्रकारों को परिवर्तित करने में त्रुटि SQL सर्वर में Excel फ़ाइल आयात करने का प्रयास करते समय मुझे एक विशेष त्रुटि मिल रही है। जब मैं मैपिंग को संपादित करने का प्रयास करता हूं तो सभी संख्यात्मक फ़ील्ड के लिए डिफ़ॉल्ट मान फ़्लोट होता है। मेरी तालिका में से किसी भी फ़ील्ड में दशमलव नहीं हैं और वे एक पैसा डेटा प्रकार नहीं हैं। वे केवल 8 अंकों की संख्या हैं। हालांकि, चूंकि मैं नहीं चाहता कि मेरी प्राथमिक कुंजी फ़्लोट के रूप में संग्रहीत हो, जब यह एक int है, तो मैं इसे कैसे ठीक कर सकता हूं? यह मुझे किसी प्रकार की छंटनी त्रुटि देता है, यदि आवश्यक हो तो मैं एक स्क्रीन कैप पोस्ट करूंगा। क्या यह एक आम समस्या है?एक्सेल से SQL सर्वर 2008

यह ध्यान दिया जाना चाहिए कि मैं एक्सेल 2007 फ़ाइलों को आयात नहीं कर सकता (मुझे लगता है कि मुझे इसका उपाय मिला है), लेकिन जब भी मैं .xls फ़ाइलों को आयात करने का प्रयास करता हूं तब भी अंकों में प्रत्येक मान को स्वचालित रूप से फ़्लोट के रूप में आयात किया जाता है और जब मैं इसे बदलने की कोशिश करता हूं तो मुझे एक त्रुटि मिलती है।

http://imgur.com/4204g

+0

आयात के लिए आप किस टूल का उपयोग कर रहे हैं? लघु उद्योगों? और यह जानना सहायक होगा कि "किसी प्रकार की त्रुटि" का अर्थ क्या है। – Pondlife

+0

@ पांडा लाइफ, मैं एसएसएमएस में आयात विज़ार्ड का उपयोग कर रहा हूं। त्रुटि के लिए एक लिंक मूल पोस्ट में संपादित किया गया है। – wootscootinboogie

उत्तर

9

लघु उद्योगों परोक्ष ताकि आप इसे स्पष्ट रूप से करने की जरूरत है, डेटा प्रकार परिवर्तित नहीं करता है। एक्सेल कनेक्शन मैनेजर केवल कुछ डेटा प्रकारों को संभाल सकता है और यह फ़ाइल की पहली कुछ पंक्तियों के आधार पर सर्वोत्तम अनुमान लगाने का प्रयास करता है। एसएसआईएस दस्तावेज में यह पूरी तरह से documented है।

आप कई विकल्प हैं:

  • CAST का उपयोग कर वास्तविक गंतव्य तालिका में आयात विज़ार्ड और फिर INSERT का उपयोग कर डेटा प्रकार नाव के साथ एक 'मचान' मेज पर
  • लोड फ्लोट करने के लिए अपने गंतव्य डेटा प्रकार बदलें या CONVERT डेटा
  • परिवर्तित एक SSIS पैकेज बनाएँ और Data Conversion परिवर्तन का उपयोग डेटा कन्वर्ट करने के लिए

आप डेटा प्रकार मैपिंग के बारे में Import Wizard documentation में टिप्पणियां भी नोट करना चाहेंगे।

+0

मैं सोच रहा था कि मुझे 'स्टेजिंग' टेबल बनाना होगा। मैं इसका सहारा नहीं लेना चाहता था क्योंकि मुझे लगा कि वह कट्टरपंथी था, लेकिन अगर यह काम करता है तो मुझे लगता है कि यह काम करेगा। धन्यवाद! :) – wootscootinboogie

+0

मैंने एक स्टेजिंग टेबल बनाया था, लेकिन सभी मान जो फ्लोट्स में परिवर्तनीय नहीं थे, चुपचाप एनयूएलएल में परिवर्तित हो गए थे। – ulu

3

जब एक्सेल एक ही कॉलम में मिश्रित डेटा प्रकार पाता है तो अनुमान लगाता है कि कॉलम के लिए सही प्रारूप क्या है (अधिकांश मान कॉलम के प्रकार को निर्धारित करते हैं) और NULL को डालने से अन्य सभी मानों को खारिज कर देता है। लेकिन एक्सेल इसे बहुत बुरी तरह से करता है (उदाहरण के लिए यदि कॉलम को टेक्स्ट माना जाता है और एक्सेल को कोई संख्या मिलती है तो यह तय करता है कि संख्या एक गलती है और इसके बजाय एक नल डालें, या यदि संख्या वाले कुछ कक्ष "टेक्स्ट" स्वरूपित हैं, तो कोई भी नल मान प्राप्त कर सकता है डेटाबेस के एक पूर्णांक कॉलम में)।

समाधान:

  1. बनाएँ नया पाठ के रूप में पहली पंक्ति में स्तंभ के नाम के साथ चादर उत्कृष्टता
  2. स्वरूप कॉलम
  3. पंक्तियों प्रारूप बिना पेस्ट करें (उपयोग सीवीएस केवल पाठ प्राप्त करने के लिए नोटपैड में प्रारूप या कॉपी/पेस्ट करें)

नोट करें कि कॉलम स्वरूपित करना मौजूदा एक्सेल शीट पर पर्याप्त नहीं है।

+0

आपके समाधान के साथ एक ही समस्या है, यह संख्या को VarChat के रूप में सहेज लेगा, जो काम नहीं करता है ... – mejiamanuel57

+1

इस पृष्ठ पर दिए गए सभी समाधानों को मैन्युअल रूप से कॉलम प्रकार बदलने की आवश्यकता है। क्षमा करें, मुझे लगता है कि किसी को पता है कि यह कैसे करना है। उपर्युक्त प्रश्न यह था कि पूर्णांक संख्याओं को फ़्लोट्स, कटाई, आदि, और अधिक विशेष रूप से इस त्रुटि संदेश से बचने के लिए "डेटा प्रकारों को परिवर्तित करने में त्रुटि" को रोकने के लिए कैसे किया जाए। – derloopkat

+0

MSSQL 2012 और Office 15.0 का उपयोग करके यह मेरे लिए काम नहीं करता था। एसएसआईएस अभी भी कॉलम को फ्लोट में कनवर्ट करना चाहता है। – Lumberjack

7

क्या Derloopkat ने कहा, अभी भी रूपांतरण (कोई अपराध Derloopkat) पर असफल जो कर सकते हैं क्योंकि एक्सेल इस पर भयानक है के बंद जा रहे हैं: नोटपैड में एक्सेल से

  1. चिपकाएं और सामान्य रूप में (.txt फ़ाइल) को बचाने के।
  2. एक्सेल के भीतर से, खुले .txt फ़ाइल ने कहा।
  3. अगला चुनें क्योंकि यह स्पष्ट रूप से टैब सीमित है।
  4. टेक्स्ट क्वालीफायर के लिए "कोई नहीं" चुनें, फिर अगली बार।
  5. पहली पंक्ति का चयन करें, शिफ्ट दबाएं, अंतिम पंक्ति का चयन करें, और टेक्स्ट रेडियल बटन का चयन करें।

यह खुल जाएगा, यह सुनिश्चित करने के लिए जांचें कि यह सटीक है और फिर एक्सेल फ़ाइल के रूप में सहेजें।

+0

आपके समाधान के साथ यह संख्या को VarChat के रूप में सहेज लेगा, जो काम नहीं करता है ... – mejiamanuel57

+1

डरलोपकट के अपने प्रश्न के तहत आपकी टिप्पणी का उत्तर मेरे विचारों को ठीक करता है – JackArbiter

+0

यह मेरे लिए काम नहीं करता है। एसक्यूएल सर्वर 2012 में अभी भी कॉलम को फ्लोट करने की कोशिश की गई है। – Lumberjack

2

एक कामकाज है।

  1. फ्लोट (डिफ़ॉल्ट) के रूप में संख्याओं के साथ एक्सेल शीट आयात करें।
  2. आयात करने के बाद, गोटो टेबल डिजाइन
  3. इंट या BigInt
  4. को फ्लोट से स्तंभ के
  5. डेटा प्रकार बदलें परिवर्तन सहेजें
  6. किसी भी पाठ लिखने के लिए BigInt से स्तंभ के डेटा प्रकार बदलें (Varchar, nvarchar, पाठ, ntext आदि)
  7. परिवर्तन सहेजें।

यही है।

1

डेटा प्रकार के मुद्दों से निपटने के दौरान वास्तव में आसान समाधान लगता है।

असल में, एक्सेल कनेक्शन स्ट्रिंग के अंत में, ;IMEX=1;"

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\YOURSERVER\shared\Client Projects\FOLDER\Data\FILE.xls;Extended Properties="EXCEL 8.0;HDR=YES;IMEX=1"; 

इस तरह के कॉलम जहां मूल्यों पाठ और संख्या के साथ मिलाया जाता है के रूप में डेटा प्रकार के मुद्दों को हल होगा जोड़ें।

कनेक्शन संपत्ति प्राप्त करने के लिए, नियंत्रण प्रवाह और हिट गुणों के नीचे Excel कनेक्शन प्रबंधक पर राइट क्लिक करें। यह समाधान एक्सप्लोरर के तहत सही होगा। उम्मीद है की वो मदद करदे।

+0

यहां तक ​​कि IMEX = 1 के साथ, यह मान रहा है कि मेरा क्षेत्र एक स्ट्रिंग फ़ील्ड है, और संख्याओं में महत्वपूर्ण अंक बंद कर रहा है। जैसे मेरा नंबर 987654321 9.876543e + 008 बन गया है। यह एक बार फिर से आयात किए गए कनवर्ट करने से 9876543 ** 00 ** देता है, जो पिछले दो अंकों को खो देता है। वास्तविक डेटा के साथ एक्सेल की इंटरऑपरेबिलिटी कुल गर्भपात है। मैं अपने सभी ग्राहकों को एक्सेल को अपनी मशीनों से हटाने की कोशिश कर रहा हूं, लेकिन वे सभी आदी हैं - मानसिक रूप से निर्भर भेड़िये। – DaveBoltman

+0

दिलचस्प। हाँ, एक्सेल स्वरूपण के साथ बहुत बढ़िया हो सकता है। https://munishbansal.wordpress.com/2009/12/15/importing-data-from-excel-having- मिश्रित- डेटा-types-in-a-column-ssis/ यह सबसे अच्छा संसाधन है जो मैंने इस विषय पर पाया है , और आपको अपनी बड़ी संख्या से निपटने में मदद करनी चाहिए। मुझे पहले इस तरह की संख्या के साथ गड़बड़ नहीं हुई है, इसलिए यह मेरे लिए एक नया मुद्दा है। – SQLCodingIsFunnn

0

का संभावित हल एक चुटकी में विचार करने के लिए:

  1. , एक्सेल फ़ाइल की एक प्रतिलिपि को बचाने के प्रारूप प्रकार 'पाठ'
  2. स्तंभ मान कॉपी और एक पाठ संपादक को चिपकाने के लिए स्तंभ को संशोधित, बचाने के फ़ाइल (इसे tmp.txt पर कॉल करें)।
  3. टेक्स्ट फ़ाइल में डेटा को एक वर्ण के साथ शुरू करने और समाप्त करने के लिए संशोधित करें ताकि SQL सर्वर आयात तंत्र टेक्स्ट के रूप में पहचाना जा सके। यदि आपके पास एक फैंसी संपादक है, तो टूल शामिल करें। मैं अपने विंडोज लैपटॉप पर साइगविन में अजीब का उपयोग करता हूं। उदाहरण के लिए, मैं कॉलम वैल्यू को एक सिंगल कोट के साथ समाप्त करना शुरू करता हूं, जैसे कि "$ awk '{print" \ x27 "$ 1" \ x27 "}' ./tmp.txt> ./tmp2.txt"
  4. कॉपी और एक्सेल फ़ाइल में आवश्यक स्तंभ के शीर्ष पर tmp2.txt से डेटा चिपकाएँ, और Excel फ़ाइल
  5. अपने संशोधित उत्कृष्टता फ़ाइल के लिए एसक्यूएल सर्वर आयात चलाने को बचाने ... दोगुना चुना डेटा प्रकार की जांच करते रहें आयातक द्वारा संख्यात्मक नहीं है ... यदि ऐसा है, तो ऊपर दिए गए चरणों को वर्णों के एक अलग सेट के साथ दोहराएं

डेटाबेस में डेटा के आयात होने के बाद कोट्स होंगे ...आप कोट्स को हटाने के लिए बाद में डेटा अपडेट कर सकते हैं, या अपनी रीड क्वेरी में "प्रतिस्थापन" फ़ंक्शन का उपयोग कर सकते हैं, जैसे "प्रतिस्थापित करें ([dbo]। [MyTable]। [MyColumn], '' '', '') "