2009-10-29 16 views
7

इसने मुझे वास्तव में अजीब व्यवहार के रूप में मारा और मैंने यहकॉलम शून्य होने पर कॉलम में रिक्त स्ट्रिंग और खाली स्ट्रिंग होने पर बीसीपी आउटपुट शून्य क्यों होता है?

"डेटाबेस तालिका से प्रतियां कॉपी या फ़ाइल में देखने से पहले मेरे कोड में बग की जांच करते समय थोड़ी देर बिताई। अगर आप एक मौजूदा फाइल निर्दिष्ट करते हैं, तो फ़ाइल ओवरराइट किया गया है। डेटा निकालने पर, ध्यान दें कि बीसीपी उपयोगिता खाली स्ट्रिंग को एक खाली स्ट्रिंग के रूप में एक शून्य और एक नल स्ट्रिंग के रूप में दर्शाती है। " (http://msdn.microsoft.com/en-us/library/ms162802.aspx से)

जाहिर है, इसने मुझे मेरी समस्या को ठीक करने की अनुमति दी लेकिन क्या कोई इस बारे में सोच सकता है या किसी को यह कारण बता सकता है कि ऐसा क्यों है?

+0

http: // stackoverflow।कॉम/प्रश्न/12588149/कैसे-टू-मेक-माइक्रोसॉफ्ट-बीसीपी-निर्यात-खाली-स्ट्रिंग-बदले-ए-नूल-चार एक संभावित समाधान प्रदान करता है – Dan

उत्तर

8

कुछ समय हो गया है, लेकिन मुझे यकीन है कि यह एक पश्च संगतता/विरासत वापस एसक्यूएल सर्वर के लिए 6.5

एसक्यूएल सर्वर 6.5 रिक्त स्ट्रिंग संचित नहीं कर सकता है कर रहा हूँ: वहाँ हमेशा एक अंतरिक्ष था। यह एसक्यूएल 7

के साथ बदल गया तो '' -> NULL और ' ' -> '' एक प्राचीन इतिहास परिप्रेक्ष्य से सही है।

0
SELECT ARTICULO as Articulo, 
     case when rtrim(CCOLOR) = '' then null else rtrim(CCOLOR) end as Color, 
     case when rtrim(TALLE) = '' then null else rtrim(TALLE) end as Talle, 
from precios 

खाली स्थान पर null भेजें।

मैं यहाँ सबसे अच्छा समाधान खोजने:

https://bytes.com/topic/sql-server/answers/143738-bcp-inserting-blank-space-empty-string

मैं चारों ओर एक काम मिल गया, एक अशक्त करने के लिए परिवर्तन रिक्त स्ट्रिंग पर एसक्यूएल क्वेरी में एक मामला संरचना का उपयोग। बदले में बीसीपी परिणामी खाली के रूप में शून्य को आउटपुट करता है! आपकी सहायता के लिए धन्यवाद। एरिक

0

यह बीसीपी के लिए "डिफ़ॉल्ट मान" खंड से संबंधित है:

https://docs.microsoft.com/en-us/sql/relational-databases/import-export/keep-nulls-or-use-default-values-during-bulk-import-sql-server

उदाहरण के लिए, अगर वहाँ एक डेटा फ़ाइल में एक अशक्त क्षेत्र, के लिए डिफ़ॉल्ट मान है कॉलम इसके बजाय लोड किया गया है।

आपको उन दिनों में सोचना होगा जहां अन्य अजीब प्रणालियों से सादे पाठ फ़ाइलों को आयात करना है। बीसीपी '' को "परिभाषित नहीं किया गया" (= गायब डेटा) के रूप में अनुवाद करता है और डेटाबेस में एक पूर्ण सेट करता है (= गायब डेटा)। अन्य सिस्टम के लिए डेटाबेस से एक NULL के आसपास दूसरा तरीका '' होना चाहिए।

डेटाबेस से बाहर 'असली' डेटा प्राप्त करने के लिए -k स्विच का उपयोग करें:

https://docs.microsoft.com/en-us/sql/relational-databases/import-export/keep-nulls-or-use-default-values-during-bulk-import-sql-server#keep_nulls

निम्नलिखित क्वालिफायर निर्दिष्ट करें कि डेटा फ़ाइल में एक खाली क्षेत्र थोक के दौरान अपने शून्य मान बरकरार रखती है तालिका कॉलम के लिए एक डिफ़ॉल्ट मान (यदि कोई है) विरासत के बजाय, आयात ऑपरेशन।

फिर आपके पास अपनी फ़ाइल/डेटाबेस में ASCII 0x0 है।

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