Không thể chuyển đổi giá trị do mất dữ liệu tiềm năng [đã đóng]


12

Hãy để tôi bắt đầu bằng cách làm rõ rằng đây không phải là một câu hỏi trùng lặp , cũng không phải là một bản sao tiềm năng cho vấn đề đó. Tôi đã cố gắng thực hiện mọi câu trả lời cho mọi biến thể đã tồn tại của vấn đề này trên StackOverflow và DBA Stack Exchange, mà không gặp may mắn.

Tôi đã phải vật lộn với vấn đề này trong hai ngày qua (làm việc với nó khoảng 7 giờ mỗi ngày) và ngay cả sau khi giải quyết vấn đề, có vẻ như không ai khác có cùng một biến thể chính xác của vấn đề của tôi.

Tôi đang cố gắng làm gì?

Trong SSIS, tôi đang cố đọc từ tệp CSV và chèn các hàng từ đó vào cơ sở dữ liệu OLE DB. Vì thế, tôi đã thực hiện thiết lập đơn giản nhất từ ​​trước đến nay.

  1. Flat File Source - đọc các hàng CSV.
  2. Derived Column - hiện tại không có gì (nó chỉ ở đó để thử nghiệm).
  3. Data Conversion - hiện tại không có gì (nó chỉ ở đó để thử nghiệm).
  4. OLE DB Destination - lưu trữ các hàng trong cơ sở dữ liệu.

Khi tôi cố chạy nó, nó dừng thực thi tại Đích OLE DB của tôi với thông báo lỗi sau.

Đã xảy ra lỗi với cột đầu vào "Số tiền" (187) trên đầu vào "Đầu vào đích OLE DB" (51). Trạng thái cột được trả về là: "Không thể chuyển đổi giá trị do mất dữ liệu."

Cột không thành công ( Amount) hiện thuộc loại DT_STR. Nó dường như là loại mà tôi có niềm tin nhất vào lúc này.

Tôi đã thử những gì?

  • Tôi đã thử sử dụng Flat File Connectionchức năng "Loại đề xuất" trên cột bị lỗi. Điều này làm cho nó đề xuất Single byte signed intkiểu dữ liệu.
    • Dừng tại Nguồn tập tin phẳng của tôi .
    • Lỗichuyển đổi dữ liệu không thành công. Chuyển đổi dữ liệu cho cột "Số tiền" trả về giá trị trạng thái 2 và văn bản trạng thái "Không thể chuyển đổi giá trị do mất dữ liệu."
  • Tôi đã thử sử dụng Derived Columnđể đúc cột thành a DT_I4.
    • Dừng tại Cột Xuất phát của tôi .
    • Lỗichuyển đổi dữ liệu không thành công. Chuyển đổi dữ liệu cho cột "Số tiền" trả về giá trị trạng thái 2 và văn bản trạng thái "Không thể chuyển đổi giá trị do mất dữ liệu."
  • Tôi đã thử sử dụng Data Conversionđể chuyển giá trị cột của mình thành a DT_I4.
    • Dừng lại ở của tôi Data Conversion.
    • Lỗichuyển đổi dữ liệu không thành công. Chuyển đổi dữ liệu cho cột "Số tiền" trả về giá trị trạng thái 2 và văn bản trạng thái "Không thể chuyển đổi giá trị do mất dữ liệu."
  • Tôi đã thử thay đổi độ dài DT_STRgiá trị của mình trong nguồn và đích.
    • Dừng tại nguồn hoặc đích tùy thuộc vào cài đặt.
  • Thay vào đó, tôi đã thử kết nối bằng trình kết nối Nguồn Excel với không IMEX=1thêm chuỗi kết nối. Không may mắn.

Ý thức lập trình của tôi nói với tôi rằng tôi đang say sưa. Tôi chưa bao giờ gặp phải một vấn đề lớn như vậy cho một điều đơn giản như vậy.

Và tại sao tôi không thể bỏ qua việc mất dữ liệu "tiềm năng"? Thật là bực bội khi nói ít nhất.

Hệ thống của tôi

Đó là máy Windows Server 2008 R2 được cài đặt SQL Server 2008. Bản thân máy được cập nhật đầy đủ thông qua Windows Update.


Có vẻ như tôi đã gặp vấn đề này với một giá trị (mặc dù kéo từ Access) và tôi đã phải sử dụng một trang mã cụ thể khi tôi tạo cột. Tôi không có quyền truy cập gói SSIS nữa để kiểm tra xem tôi đã làm gì.

Kiểu dữ liệu của cột mà bạn đang cố gắng chèn là Amountgì?
Jon của tất cả các giao dịch

2
Mở Trình quản lý kết nối tệp phẳng của bạn cho CSV. Chuyển đến tab Nâng cao và chọn Amountcột. Chụp ảnh màn hình và xin vui lòng cập nhật câu hỏi của bạn với hình ảnh này.
billinkc

Có cơ hội để xem Trình quản lý kết nối chưa?
billinkc

1
Tôi không tin rằng bạn bị lừa nhưng không thấy định nghĩa của Trình quản lý kết nối, không thể nói được.
billinkc

Câu trả lời:


3

Tôi đã gặp phải điều này một vài lần và vấn đề là sự không phù hợp của các loại dữ liệu trong các tham số xuất / nhập. Điều đầu tiên cần làm là kiểm tra các tham số đó bằng cách nhấp chuột phải vào nguồn hoặc đích, chọn Advanced Editor. Chuyển đến Thuộc tính đầu vào và đầu ra và kiểm tra loại dữ liệu cho cột đó cho tất cả các mục - cả Bên ngoài, Đầu ra và Đầu vào. Tôi thường thấy một phương sai ở đây, thường là một lần là Unicode (WSTR) và I4 hoặc DSTR khác.


7

Bỏ qua lỗi

Trước hết, bạn sẽ có thể bỏ qua việc cắt xén chuỗi bằng cách đi tới Nguồn tệp phẳng, Đầu ra lỗi và sau đó thay đổi "Thành phần không thành công" trong "Cắt ngắn" thành "Bỏ qua lỗi".

Giải pháp tốt hơn

Vấn đề thực sự có thể là độ dài chuỗi bên trong đường ống SSIS vẫn sai vì nó đã được khởi tạo ở một số điểm trước đó.

Bạn có thể xác định xem đó có phải là trường hợp không bằng cách nhấp đúp vào mũi tên màu lục từ Nguồn tệp phẳng của bạn (hoặc sau khi chuyển đổi cột / dữ liệu được tạo ra) và chọn "Dữ liệu meta". Ở đó bạn có thể thấy chiều dài của trường bên trong đường ống.

Nếu bạn thường thấy rằng dữ liệu meta không khớp với thành phần nguồn nữa, chủ yếu là nếu tạo Nguồn tệp phẳng VÀ Kết nối không chính xác của nó thông qua Trình hướng dẫn.

Đề xuất của tôi sẽ là xóa kết nối và Nguồn tệp phẳng và tạo lại chúng khi tôi chưa tìm được cách đồng bộ hóa dữ liệu meta đường ống với các thành phần nguồn.


2
Điều này không thuộc "cắt ngắn" mặc dù. Tôi đã thử nó.
Mathias Lykkegaard Lorenzen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.