2013-02-12 41 views
16

मैं SQL सर्वर आयात और निर्यात विज़ार्ड का उपयोग कर किसी सर्वर में किसी डेटाबेस से डेटा को एक नई तालिका में आयात करने का प्रयास कर रहा हूं। (SQL सर्वर प्रबंधन स्टूडियो 2012)SQL सर्वर आयात और निर्यात विज़ार्ड में स्रोत प्रकार 200?

विज़ार्ड में, मैं जाँच की "एक प्रश्न लिखें हस्तांतरण करने के लिए डेटा निर्दिष्ट करने के लिए", और SQL विवरण रिटर्न निम्नलिखित चार स्तंभों युक्त डेटा:

+-----------------------------------------------------------------------------+ 
| ID(varchar(100)) | Title(text) | Description(text) | IsActive(tinyint)| 
+-----------------------------------------------------------------------------+ 

मैं चाहता हूँ

+----------------------------------------------------------------------------------------+ 
| ID(varchar(4)) | Title(varchar(200)) | Description(varchar(2000)) | IsActive(bit)| 
+----------------------------------------------------------------------------------------+ 

तो करने के लिए नई तालिका के लिए प्रकार बदलने के लिए, "स्तंभ मैपिंग" पेज में ("टेबल्स का चयन स्रोत और दृश्य" पृष्ठ में, मैं क्लिक "संपादित मैपिंग ...") , मैंने गंतव्य प्रकार को उपर्युक्त प्रकार में बदल दिया।

icon Source Column Source Type Destination Column Destination Type Convert 
---------------------------------------------------------------------------------- 
error ID    200   ID     varchar 
error Title   200   Title     varchar 
error Description  201   Description   varchar 
warning IsActive   tinyint  IsActive    bit  

यहां तक ​​कि अगर: फिर, "समीक्षा डेटा प्रकार का मिलान" पेज में "अगली", क्लिक करने के बाद, मैं एक त्रुटि है कि कहते हैं, "Found 3 unknown column type conversion(s). You are only allowed to save the package"

डेटा प्रकार मानचित्रण निम्न जानकारी से पता चलता मिल मैं डेटा प्रकार को में मैपिंग्स संपादित नहीं करता ... "पृष्ठ, मुझे एक ही त्रुटि मिलती है।

मुझे समझ में नहीं आता कि डेटा प्रकार के संदर्भ में "200" का अर्थ क्या है, और मैं इस डेटा को एक अलग सर्वर में एक नई तालिका में कैसे आयात कर सकता हूं?

मैं किसी भी मदद की सराहना करता हूं।

उत्तर

4

मुझे लगता है कि टेक्स्ट कॉलम विज़ार्ड के साथ वर्चर्स कॉलम में डालने में सक्षम नहीं हैं। तालिका कितनी बड़ी है, इस पर निर्भर करते हुए, आप स्रोत को एसएसएमएस के माध्यम से सीएसवी में निर्यात कर सकते हैं और फिर इसे आयात कर सकते हैं। यह काम करना चाहिए लेकिन अगर आपके पास आयात करने के लिए कई टेबल हैं तो आप एक लिंक किए गए सर्वर को जोड़ सकते हैं। तो फिर तुम सिर्फ पुराने टेबल या इस तरह नई तालिका अर्हता प्राप्त कर सकते हैं:

insert into [new_server].database.dbo.tablename 
select * from old_table 

मैं जानता हूँ कि SQL2000 जुड़ा हुआ सर्वर बनाने के लिए एक दर्द है, हालांकि जो मैं क्या अनुमान लगा रहा हूँ आप से जब से तुम पाठ है निर्यात करने के लिए कोशिश कर रहे हैं है कॉलम।

+0

धन्यवाद। मैं सोच रहा था कि अगर विज़ार्ड का उपयोग करना आयात करना असंभव है या विज़ार्ड काम करने का कोई तरीका था, लेकिन यह समाधान विज़ार्ड के रूप में आसान काम करता है :) – kabichan

+0

बस किसी और के लिए एफवाईआई के रूप में आने पर, सुनिश्चित करें कि आप पहचान सम्मिलित करें यदि आप आयातित तालिका में एक ही पीके को रखने की आवश्यकता है। 'सेट IDENTITY_INSERT गंतव्य TableName चालू'। ऊपर की तरह संरचित आपकी क्वेरी के बाद, इसे वापस बंद करें। 'सेट IDENTITY_INSERT गंतव्य TableName OFF' – Tommy

13

दुर्भाग्य से यह एक बग है। देखें (और वोट) नीचे दिए गए लिंक:

->SQL Server Import and Export Wizard Does Not Recognise Varchar and NVarchar

और

->DTSWizard in SQL 2012 SP1 no longer recognizes nvarchar/varchar data types when source is a query

+1

यह SQL Server 2008 R2 प्रबंधित करता है मानसिक स्टूडियो। उन्होंने इसे SQL सर्वर 2012 के साथ पेश किया .. और अभी भी एक मुद्दा है। एक बड़ी बग का क्रमबद्ध करें .. विश्वास नहीं कर सकता कि उन्होंने अभी तक इसे संबोधित नहीं किया है! –

25

प्रयोग इस त्रुटि केवल लगता है का एक सा के साथ होने के लिए आप एक प्रश्न है जब स्रोत के रूप में। स्वीकृत उत्तर मेरे लिए काम नहीं करता क्योंकि एक फ्लैट फ़ाइल की प्रतिलिपि के परिणामस्वरूप एक ही त्रुटि होगी।

इसे हल करने के लिए मैंने अपनी क्वेरी View में डाल दी और Write a query... के बजाय Copy From one or more Tables Or Views का चयन किया।

मैं सामान्य रूप से उस के बाद विज़ार्ड के माध्यम से चला गया और अपने डेटा कोई त्रुटि के साथ

+2

यह बदसूरत समय लेने वाली माइक्रोसॉफ्ट बग के आसपास पाने का यह सही तरीका है।आप एक बियर सर – Batu

+0

के लायक हैं मेरे गधे को बचाया ... धन्यवाद – kstubs

+0

शानदार! क्या यह मुद्दा कुछ डेटा को स्थानांतरित करने की कोशिश कर रहा था जिसमें पाठ का डेटाटाइप था ... एक आकर्षण की तरह काम किया! धन्यवाद @ शू – Eli

5

एक दीर्घकालिक समाधान के माध्यम से चला गया है (यह फिक्सिंग माइक्रोसॉफ्ट के अलावा) (या वे पहले से ही है?) भी कुछ लिंक से गहरा है जवाब पोस्ट किया गया।

प्रभावित मशीन पर, एक एक्सएमएल फ़ाइल है जो प्रत्येक ट्रांसफॉर्म प्रकार के लिए कोड-टू-वैल्यू मैपिंग को परिभाषित करती है।
"200" & "201" के साथ विफलता के कारण क्या देखा जाता है, एक लापता मैपिंग
.... अच्छा है, इसे "200/201" के रूप में नहीं आना चाहिए था, लेकिन जैसा कि हमने किया था, हम इच्छा है कि इसे मैप किया गया

यदि आप ऐसी कॉन्फ़िगरेशन के साथ खेलना चाहते हैं तो इसे मैन्युअल रूप से सम्मिलित किया जा सकता है।

वह स्थान है जहां मैं इस सवाल का जवाब काफी पेज नीचे एक तरीके मिल गया: http://social.msdn.microsoft.com/Forums/sqlserver/en-US/97ff1f01-c02a-4c9a-b867-8eaecc464cfb/2012-sp1-no-longer-recognizes-common-data-types?forum=sqlintegrationservices

मानचित्रण फ़ाइलें सी में हैं: \ Program Files (x86) \ Microsoft SQL सर्वर \ 110 \ डीटीएस \ MappingFiles \
(या समतुल्य)

प्रत्येक प्रकार के स्रोत-से-गंतव्य परिवर्तन के लिए एक है।

एसक्यूएल सर्वर के बीच जाने के लिए,
MSSql9ToMSSql8.xml ऐसे
MSSQLToSSIS10.XML के रूप में लोगों को देखने के
MSSql10ToMSSql9.xml

आप कहाँ देख

<!-- varchar --> 
<dtm:DataTypeMapping > 
    <dtm:SourceDataType> 
     <dtm:DataTypeName>varchar</dtm:DataTypeName> 
    </dtm:SourceDataType> 
    <dtm:DestinationDataType> 
     <dtm:CharacterStringType> 
      <dtm:DataTypeName>DT_STR</dtm:DataTypeName> 
      <dtm:UseSourceLength/> 
     </dtm:CharacterStringType> 
    </dtm:DestinationDataType> 
</dtm:DataTypeMapping> 

"200" मैपिंग जोड़ें इस तरह से मिलान करने के लिए कि आप

<!-- varchar --> 
<dtm:DataTypeMapping > 
    <dtm:SourceDataType> 
     <dtm:DataTypeName>varchar</dtm:DataTypeName> 
    </dtm:SourceDataType> 
    <dtm:DestinationDataType> 
     <dtm:CharacterStringType> 
      <dtm:DataTypeName>DT_STR</dtm:DataTypeName> 
      <dtm:UseSourceLength/> 
     </dtm:CharacterStringType> 
    </dtm:DestinationDataType> 
</dtm:DataTypeMapping> 
<dtm:DataTypeMapping > 
    <dtm:SourceDataType> 
     <dtm:DataTypeName>200</dtm:DataTypeName> 
    </dtm:SourceDataType> 
    <dtm:DestinationDataType> 
     <dtm:CharacterStringType> 
      <dtm:DataTypeName>DT_STR</dtm:DataTypeName> 
      <dtm:UseSourceLength/> 
     </dtm:CharacterStringType> 
    </dtm:DestinationDataType> 
</dtm:DataTypeMapping> 
से मेल खाते हैं

उसी तरह से nvarchar और किसी अन्य को ठीक करें!

3

मैं एसक्यूएल में चरित्र फ़ील्ड को चार (##) के रूप में कास्टिंग करके और फिर गंतव्य डेटा प्रकारों को वर्चर (##) में बदलकर इस पर काम करने में सक्षम था। खेतों को उपयोग से पहले ट्रिमिंग की आवश्यकता हो सकती है, लेकिन आयात काम करता है।

0

सबसे तेज़ समाधान आयात/निर्यात विज़ार्ड का उपयोग कर उसी डेटाबेस (स्रोत) में डेटा को एक नई तालिका में निर्यात करना है। फिर नई तालिका से डेटा निर्यात करें। किसी भी तरह आयात/निर्यात विज़ार्ड उस समय अपने जादू (वास्तव में नहीं) काम करता है जब यह नई तालिका बनाता है। आयात/निर्यात विज़ार्ड का उपयोग करने के लिए दर्द को समाप्त करने के लिए ज्योति धन्यवाद।

1

आपको वास्तव में कॉन्फ़िगरेशन, विचार या जो भी कुछ भी करने की आवश्यकता नहीं है। बस एसएसआईएस पैकेज को सहेजें और इसे एक्सप्लोरर में डबल-क्लिक करके निष्पादित करें। यह (ManagementStudio फ़ोल्डर में DTExecUI.exe) "निष्पादित पैकेज उपयोगिता का शुभारंभ करेंगे जो बिना किसी त्रुटि के पैकेज चलाने चाहिए।