भगवान का शुक्र है, @ user_0 उत्तर और @ user3494351 के गूढ़ उत्तर और टिप्पणी और इस प्राचीन मंच पोस्ट के लिए धन्यवाद, मैंने अंततः दीवार के खिलाफ अपना सिर पीटने के कई घंटों के बाद इसका पता लगाया।
मुद्दा यह है कि बीसीपी डिफ़ॉल्ट रूप से फ़ाइल में अतिरिक्त 8 बाइट जोड़ना पसंद करता है। यह फ़ाइल को दूषित कर देता है और यदि आप केवल मूल -n ध्वज का उपयोग करते हैं तो इसे खोलने में असमर्थ बना देता है।
हालांकि, बीसीपी आपको आउटपुट के रूप में एक प्रारूप फ़ाइल निर्दिष्ट करने की अनुमति देता है जो आपको यह बताने की अनुमति दे सकता है कि अतिरिक्त 8 बाइट्स न जोड़ें। तो मेरे पास SQL सर्वर में एक टेबल है जिसे मैंने बनाया है (कर्सर में इस्तेमाल किया जाना है) जिसमें मेरे बाइनरी डेटा के साथ केवल एक पंक्ति और एक कॉलम है। जब आप पहली कमांड चलाते हैं तो तालिका मौजूद होनी चाहिए।
कमांड लाइन में सबसे पहले आपको यह करना होगा:
bcp MyDatabase.MySchema.MyTempTable format nul -T -n -f formatfile.fmt
यह उस निर्देशिका में formatfile.fmt बनाता है जिसमें आप हैं। मैंने E:\ ड्राइव पर किया था। यह इस तरह दिखता है:
10.0
1
1 SQLBINARY 8 0 "" 1 MyColumn ""
वह 8 वहीं वेरिएबल है जो बीसीपी कहता है कि आपकी फाइल में कितने बाइट जोड़ने हैं। यह कमीने है जो आपकी फाइलों को भ्रष्ट कर रहा है। उस चूसने वाले को 0 में बदलें:
10.0
1
1 SQLBINARY 0 0 "" 1 MyColumn ""
अब बस अपनी BCP स्क्रिप्ट चलाएँ, -n फ़्लैग छोड़ें और -f फ़्लैग शामिल करें:
bcp "SELECT MyColumn FROM MyDatabase.MySchema.MyTempTable" queryout "E:\MyOutputpath" -T -f E:\formatfile.fmt