سؤال

لدي مصدر بيانات FoxPro ، والوجهة هي SQL Server 2008.

على جانب Foxpro ، لدي عمود مع Date نوع البيانات. هذا عرض قدره 8 ، وقيمة دقيقة 0001-01-01 و MAX هي 9999-12-31. على جانب خادم SQL ، لدي ملف datetime. أيضا عرض 8 و MIN هي 1753-01-01 و MAX هي 9999-12-31.

في مهمة تدفق بيانات SSIS الخاصة بي ، لدي مكون مصدر OLE DB يقرأ في جدول FoxPro. يتم تعيين الأعمدة على أنها dt_dbdate في كل من الأعمدة الخارجية والإخراج. يأخذ وجهة OLE DB إلى جدول SQL Server تلك الأعمدة وتدفقها إلى DT_DBTIMESTAMP. أنا متأكد من أن DT_DBTIMESTAMP يمكنه التعامل مع نطاقات التاريخ هذه بشكل كاف ، والتأكد بشكل معقول من DT_DBDATE (لكنني أواجه مشكلة في العثور عليها في وثائق MS).

المشكلة

عندما أقوم بتنفيذ المهمة ، كنت أواجه مشكلة في الفشل والشكوى من "تنسيق تاريخ غير صالح" ثم "فشل التحويل لأن قيمة البيانات قد زادت من النوع المحدد" عندما تواجه قيمًا من أوائل القرن العشرين ، إلى القيم انتهت 2050. لست متأكدًا تمامًا من أين أخطأت.

السؤال مكافأة

كيف يمكنني التعامل مع الفائض في مهمة تدفق البيانات الخاصة بي؟

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

المحلول

قد ترغب في القيام باستعلام VFP بسيط يبحث عن السجلات التي تتجاوز النطاق مثل استعلام VFP لـ

select * from yourtable
   where YourDate < date( 1753, 1, 1 )
      or YourDate > date( 9999, 12, 31 )

انظر إلى تلك السجلات للمشاكل ... بالإضافة إلى ذلك ، انظر إلى الأعمدة الأخرى التي قد تسبب مشكلات الحدود الخاصة بك

نصائح أخرى

أعتقد أنك بحاجة إلى تحديد ماذا تريد أن تفعل ببياناتك

إذا كنت ترغب في تحميله كما هو ، فأنت بحاجة إلى تغيير نوع بيانات الحقل بحيث يكون قادرًا على الاحتفاظ بالبيانات.

أو إذا كنت ترغب في تصحيح البيانات الخاطئة ، فستحتاج إلى التحقق من صحة وتحويلها.

إذا كنت على استعداد لإنفاق بعض المال ، فيرجى التفكير في استخدام معالج ETL المتقدم.

إنه يعمل مع Text و XML و Excel و Access و DBF و FoxPro و ODBC و OLE DB و MS SQL Server و Oracle و MySQL و Postgresql و Firebird و Interbase و SQLite و Pop3 و SMTP و File System و FTP و SSL و Unicode.

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