2013-04-30 27 views
6

मैं एक .csv फ़ाइल से SQL Server 2012 डेटाबेस में डेटा का एक बहुत बड़ा सेट डंप करने का प्रयास कर रहा हूं। हजारों INSERT करने की बजाय, मैं bcp की जांच कर रहा हूं।बीसीपी कोई त्रुटि नहीं देता है, लेकिन किसी भी पंक्तियों की प्रतिलिपि नहीं करता है

संपादित करें: यह एक स्वचालित प्रक्रिया के लिए है, न केवल एक बंद है। मेरे पास इस डेटाबेस के लिए BULK INSERT अधिकार नहीं है।

जब मैं डेटाबेस में डेटा कॉपी करने का प्रयास करता हूं, bcp कोई त्रुटि नहीं देता है, लेकिन वास्तव में कुछ भी कॉपी नहीं करता है - यह केवल 0 rows copied देता है। मैंने इसे कम से कम मामले में दबा दिया है जो काम नहीं करता है।

सबसे पहले, दो कॉलम के साथ एक सरल तालिका बनाने:

CREATE TABLE [dbo].[mincase](
    [key] [varchar](36) NOT NULL, 
    [number] [int] NOT NULL 

    PRIMARY KEY CLUSTERED 
    (
     [key] ASC 
    ) 
    WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 40) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

फिर, bcp का उपयोग इस से एक प्रारूप फ़ाइल बनाने के लिए। ध्यान दें कि यह उदाहरण एक एक्सएमएल प्रारूप फ़ाइल बनाता है, लेकिन इससे कोई फर्क नहीं पड़ता कि यह XML है या इसके लिए मूल है।

bcp MyDB.dbo.mincase format nul -T -n -f mincasexml.fmt -x -S .\SQLEXPRESS 

अब एक पंक्ति और दो प्रविष्टियों, टैब-सीमांकित के साथ एक डेटा.csv फ़ाइल बनाएं। फिर से, कि एक टैब, नहीं दो रिक्त स्थान है, और यह बात करने के अनुगामी नई पंक्तियों या नहीं देखते हैं कि क्या नहीं लगता है

somecharacters 12345 

: मेरे मामले में, फ़ाइल बस है।

bcp MyDB.dbo.mincase in data.csv -f mincasexml.fmt -T -S .\SQLEXPRESS 

बजाय डेटाबेस के लिए डेटा की प्रतिलिपि, मैं इस:

Starting copy... 

0 rows copied. 
Network packet size (bytes): 4096 
Clock Time (ms.) Total  : 1 

किसी को भी पता है

अब जब कि प्रारूप फ़ाइल के साथ bcp उपयोग करने के लिए इस फ़ाइल से डेटा को सम्मिलित करने की कोशिश यहाँ क्या चल रहा है?

धन्यवाद!

+0

क्या आपने आयात डेटा विकल्प का प्रयास किया है? –

उत्तर

8

बीसीपी कमांड को आम तौर पर बीसीपी फ़ाइल के प्रारूप मोड को निर्दिष्ट करने के लिए पहचानकर्ता की आवश्यकता होती है। , तो आप ऐसा

  • -c निर्दिष्ट करता चरित्र (प्लेन) मोड
  • -n देशी मोड
  • डब्ल्यू यूनिकोड मोड

निर्दिष्ट करता है अपने परीक्षण मामले में निर्दिष्ट करता है, आपके द्वारा बनाए गए फ़ाइल प्लेन है कमांड में अपने बीसीपी में '-c' निर्दिष्ट करना चाहिए।

bcp MyDB.dbo.mincase in data.csv -c -T -S .\SQLEXPRESS 

क्षेत्र सीमांकक (चरित्र मोड और मूल निवासी मोड उत्तम आचरण से संबंधित अनुभाग देखें) स्तंभ मानों में आने वाले के साथ मुद्दों से बचने के लिए आयात और निर्यात के लिए '-n' का उपयोग कर Microsoft Recommends

+1

वह था, एक मामूली संपादन के साथ: -f ओवरराइड-सी, इसलिए प्रारूप फ़ाइल को पूरी तरह से हटाकर समस्या को हल किया गया। अंतिम परिणाम यह है: '.ccp MyDB.dbo.mincase data.csv -c -T -S। \ SQLEXPRESS' – Mark

+1

ग्रेट .. मेरे उत्तर को ठीक करना। –

1

मैं एक समान समस्या में भाग गया, सिवाय इसके कि मैं पहले से ही एक प्रारूप फ़ाइल का उपयोग कर रहा था, इसलिए प्रारूप झंडे में से एक जोड़ने से मदद नहीं मिलेगी। यहां किसी और के लिए जो यहां समाप्त होता है, मैं समझाना चाहता हूं कि मेरे लिए यह मुद्दा क्या हुआ (और उम्मीद है कि अंतर्निहित समस्या का कारण क्या है)।

मुद्दा यह है कि बीसीपी वास्तव में फ़ाइल में पाठ की रेखाओं को संसाधित नहीं करता है; बल्कि, यह आपके द्वारा दिए गए निर्देशों के अनुसार, डेटा की एक स्ट्रीम को संसाधित करता है। इसका मतलब है कि न्यूलाइन को अनदेखा कर दिया जाएगा, अगर आप (गलती से) बीसीपी को बताते हैं।

13.0 
1348 
1 SQLCHAR 0 21 "," 1 RecordKey "" 
2 SQLCHAR 0 30 "," 0 SubmissionKey "" 
3 SQLCHAR 0 1 "," 2 A1cLvl "" 
... 
1347 SQLCHAR 0 1 "," 0 WoundIntVac "" 
1348 SQLCHAR 0 1 "/r/n" 0 XClampTm "" 

तुम करीब से देखो, तो आप स्लैश पर टर्मिनेटर क्षेत्र में पीछे की ओर कर रहे हैं देखेंगे:

मेरे मामले में, इस प्रारूप फ़ाइल में अंतिम पंक्ति में कोई गलती साबित हुआ अंतिम पंक्ति तो, विंडोज-स्टाइल लाइन एंडिंग की तलाश करने के बजाय, बीसीपी वास्तव में डेटा स्ट्रीम में टेक्स्ट स्ट्रिंग "/ आर/एन" की तलाश में था।

चूंकि स्ट्रिंग वास्तव में मेरे डेटा में वास्तव में दिखाई नहीं दे रही थी, इसलिए बीसीपी वास्तव में मेरे अंतिम क्षेत्र से मेल खाने वाला कुछ भी नहीं मिला। इसलिए, यह समझ में आता है कि इसे कॉपी करने के लिए "0 पंक्तियां" मिलीं।

मुझे अभी भी यकीन नहीं है कि इसका परिणाम "अप्रत्याशित ईओएफ सामना" त्रुटि या कुछ ऐसा क्यों नहीं होता है, लेकिन उम्मीद है कि कोई और इस पर विस्तार करने में सक्षम होगा।

संबंधित मुद्दे

 संबंधित मुद्दे