سؤال

أحاول استخدام الأداة المساعدة SQL Server BCP لاستيراد ملف نصي من مشاركة Samba. BCP هو الاختناق على نهايات خط يونيكس. أنا متأكد من أنني أستطيع إضافة خطوة وسيطة، إما على UNIX أو Windows، لتغيير نهايات السطر إلى نمط Windows. لكنني أفضل استيراد الملفات من UNIX دون تعديل.

يعرف أي شخص ما إذا كان هناك طريقة لإخبار SQL Server BCP للبحث عن نهايات خط UNIX؟

هل كانت مفيدة؟

المحلول

يجب عليك استخدام ملف تنسيق مع BCP وتحديد المنهي باسم n. سيقوم سطر الأوامر التفاعلية دائما بتطبيق r، حيث سيستخدم ملف تنسيق بالضبط ما تحدده. مرجع http://www.eggheadcafe.com/software/aspnet/32239836/bcp-out-with-char10-as-row-terminator.aspx..

يتم شرح إنشاء ملف تنسيق جيدا في BOL ولكن التعليق / تحديث مشاركتك الأصلية إذا كنت بحاجة إلى مساعدة.

نصائح أخرى

الإجابة البسيطة هي استخدام HEX، كما ذكر في أحد التعليقات، مثل Terminator الصف:

-r 0x0a

هل حاولت تعيين RowerMinator = ' n'؟

لا أعتقد أنه يمكنك القيام بذلك من سطر الأوامر BCP. ولكن، أعتقد أن إصدار SQL التالي سيعمل.

DECLARE @Command nvarchar(1000)

SET @Command = N'BULK INSERT MyTable
FROM ''<path\file>''
WITH (ROWTERMINATOR = '''+CHAR(10)+''')'

exec sp_executeSQL @Command

إذا لم يكن لديك الكثير من الوقت لدراسة BCP بتفصيل كبير، تحقق من هذا واحد:http://msdn.microsoft.com/en-us/library/ms190759.aspx.

وسوف يمنحك مثالا سهلا، وشرح ما تعني المطالبات التفاعلية، خيار حفظ التنسيق بمجرد الانتهاء (إذا كنت ستقوم بذلك بشكل متكرر) وما إلى ذلك.

إذا كانت بياناتك كبيرة و / أو لديك العديد من المزدوجات التي تريدها، فيمكنك إنشاء جدول أولا ثم قم بإجراء تصدير محاكس صغير (سيأخذ BCP محددة بسيطة كأجهزة الأولى) وما زال اختيار التنسيقات بشكل تفاعلي، عمود حسب العمود. يمكنك حفر في ملف FMT المحفوظ الأخير إذا كان لديك بعض السبب الإضافي لذلك.

نعم، هذا مجنون. فهمي هو أن SQL Server BCP يدرج دائما r قبل مهما كان Terminator الذي تتوقع استخدامه. لذلك، إذا كنت لا تستخدم -r، فستتوقع ذلك لاستخدام n فقط. لكنها لا ... إدراجها بغباء ص حتى أنه يمكن استخدام r n. إذا قمت بتحديد -r r n، فلن يعمل ذلك؛ أظن أنه الآن يريد الآن خط النهاية r r n. هذا كله عمل بعض ترميز أحمق لبرنامج Windows العالم الذي يحاول جعل الحياة أسهل للمبتدئين وإنهاء الأشياء التي تصل إلى أمر مستحيل على الجميع. لقد واجهت هذه المشكلة عند نقل الملفات من Sybase إلى SQL Server والحل كان لتحديد -r r n في BCP من Sybase (والذي يعمل بالضبط كما كنت تطلب ذلك تماما!) و -R n (أو فقط) 'T استخدم -r) ل SQL Server BCP في.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top