هل يحتفظ BCP خارج ترتيب الصف أثناء التصدير في ملف بيانات؟
-
19-09-2019 - |
سؤال
أحتاج إلى تصدير البيانات إلى ملف من طاولة ضخمة مع عمود واحد فقط ولكن الآلاف من الصفوف حيث طلب الصف مهم. أنا أستخدم الأمر BCP على النحو التالي
bcp DBNAME.dbo.tblName out mydata.dat -Uusername -Ppassword -c
لقد راجعت مع الجدول الذي يحتوي على 10 صفوف وأرى أن ترتيب الصفوف يتم الحفاظ عليه في ملف البيانات. ولكن هل يمكنني افتراض أن BCP ستحافظ على الطلب إذا كان عدد الصفوف يقول أكثر من 10000؟
المحلول
أعتقد أنه سيكون إذا كنت تستخدم عبارة SQL (مع ORDER BY
) في الأمر BCP الخاص بك:
http://www.sqlteam.com/article/exporting-data-programatically-with-bcp-and-xp_cmdshell.
حيث لديهم المثال التالي:
SET @bcpCommand = 'bcp "SELECT * FROM pubs..authors
ORDER BY au_lname" queryout "'
نصائح أخرى
يجب ألا تفترض أبدا أن SQL SELECT (أو BCP) سيعود القيم بترتيب معين أو نفس الترتيب ما لم تستخدم جملة الطلب.
بشكل عام، يتم إرجاع القيم بالترتيب بناء على فهرس على الطاولة.
ومع ذلك، فقد رأيت حالات لا يتم إرجاع القيم في ترتيب الفهرس. يبدو أن الصفوف الموجودة في ذاكرة التخزين المؤقت قد يتم إرجاعها قبل الصفوف من القرص حتى إذا كانت الصفوف الموجودة على القرص هي الأولى في الفهرس.