Tôi sẽ không đưa ra câu trả lời này ngoại trừ việc bạn đã làm việc rất chăm chỉ để ghi lại nó và nó đã được ủng hộ mà không có câu trả lời nào sau một tháng. Vì vậy, đây tiếp tục. Các lựa chọn duy nhất của bạn dường như là thay đổi dữ liệu hoặc thay đổi công cụ.
Khi công cụ bị hỏng và nhà cung cấp không quan tâm, thật sai lầm nếu bạn tiếp tục cố gắng. Đã đến lúc chuyển đổi. Bạn đã nỗ lực rất nhiều để nghiên cứu chính xác cách nó bị hỏng và chứng minh rằng nó không chỉ vi phạm RFC mà còn vi phạm phiên bản trước của chính công cụ. Bạn cần thêm bao nhiêu bằng chứng nữa?
CSV cũng là một cái neo của con thuyền. Nếu bạn có tùy chọn, bạn nên sử dụng định dạng tệp được phân tách thông thường. Đối với nhiều ứng dụng, phân định bằng tab là tốt. Dấu phân tách tốt nhất IMO là '\' vì ký tự đó không có vị trí trong văn bản tiếng Anh. (Mặt khác, nó sẽ không hoạt động đối với dữ liệu có chứa tên đường dẫn Windows.)
CSV có hai vấn đề là định dạng trao đổi. Đầu tiên, nó không phải là tất cả tiêu chuẩn đó; các ứng dụng khác nhau nhận ra các phiên bản khác nhau, bất cứ điều gì RFC có thể nói. Thứ hai (và có liên quan) là nó không tạo thành ngôn ngữ thông thường trong điều kiện CS, đó là lý do tại sao nó không thể được phân tích cú pháp như một biểu thức chính quy. So sánh với ^([^\t]*\t)*[\t]*$
cho một dòng được phân cách bằng tab. Hàm ý thực tế của sự phức tạp trong định nghĩa của CSV là (xem ở trên) sự khan hiếm tương đối của các công cụ để xử lý chúng và xu hướng không tương thích của chúng, đặc biệt là trong thời gian ngắn.
Nếu bạn cung cấp cho CSV và DTS khởi động, bạn có các tùy chọn tốt, một trong số đó là bcp.exe
. Nó rất nhanh và an toàn vì Microsoft đã không muốn cập nhật nó trong nhiều năm. Tôi không biết nhiều về DTS, nhưng trong trường hợp bạn phải sử dụng nó để tự động hóa, IIRC có một cách để gọi các tiện ích bên ngoài. Tuy nhiên, hãy cẩn thận, bcp.exe
không trả lại trạng thái lỗi cho shell một cách đáng tin cậy.
Nếu bạn quyết tâm sử dụng DTS và gắn bó với CSV, thì lựa chọn còn lại thực sự tốt nhất của bạn là viết một chế độ xem chuẩn bị dữ liệu một cách thích hợp cho nó. Nếu được lùi vào góc đó, tôi sẽ tạo một lược đồ có tên, chẳng hạn như "DTS2012CSV", để tôi có thể viết select * from DTS2012CSV.tablename
, cho bất kỳ ai quan tâm đến cơ hội chiến đấu để hiểu nó (bởi vì bạn sẽ ghi lại nó, phải không, trong các nhận xét trong văn bản xem?). Nếu cần, những người khác có thể sao chép kỹ thuật của nó cho các phần chiết xuất bị hỏng khác.
HTH.