ไม่สามารถแปลงค่าได้เนื่องจากอาจสูญเสียข้อมูล [ปิด]


12

ผมขอเริ่มด้วยการชี้แจงว่านี่ไม่ใช่คำถามซ้ำซ้อนหรืออาจเป็นซ้ำได้สำหรับเรื่องนั้น ฉันได้ลองใช้ทุกคำตอบกับทุกตัวแปรที่มีอยู่ของปัญหานี้แล้วใน StackOverflow และ DBA Stack Exchange โดยไม่มีโชค

ฉันดิ้นรนกับปัญหานี้ในช่วงสองวันที่ผ่านมา (ทำงานกับมันประมาณ 7 ชั่วโมงต่อวัน) และแม้หลังจาก Googling ปัญหาก็ปรากฏว่าไม่มีใครมีปัญหาที่แตกต่างกันของปัญหาของฉัน

ฉันพยายามทำอะไร

ใน SSIS ฉันพยายามอ่านจากไฟล์ CSV และแทรกแถวจากแถวนั้นลงในฐานข้อมูล OLE DB สำหรับสิ่งนั้นฉันได้ทำการตั้งค่าที่ง่ายที่สุดเท่าที่เคยเห็นด้านล่าง

  1. Flat File Source - อ่านแถว CSV
  2. Derived Column - ขณะนี้ไม่ได้ทำอะไรเลย (เป็นเพียงการทดลอง)
  3. Data Conversion - ขณะนี้ไม่ได้ทำอะไรเลย (เป็นเพียงการทดลอง)
  4. OLE DB Destination - เก็บแถวในฐานข้อมูล

เมื่อฉันพยายามเรียกใช้มันจะหยุดการดำเนินการที่ปลายทาง OLE DBของฉันด้วยข้อความแสดงข้อผิดพลาด

มีข้อผิดพลาดกับคอลัมน์อินพุต "จำนวน" (187) บนอินพุต "อินพุตปลายทาง OLE DB" (51) สถานะคอลัมน์ที่ส่งคืนคือ: "ไม่สามารถแปลงค่าได้เนื่องจากข้อมูลอาจสูญหาย"

คอลัมน์ที่ล้มเหลว ( Amount) เป็นประเภทDT_STRปัจจุบัน ดูเหมือนจะเป็นประเภทที่ฉันมีศรัทธามากที่สุดในตอนนี้

ฉันลองทำอะไร

  • ฉันได้ลองใช้Flat File Connectionฟังก์ชั่น "ประเภทแนะนำ" ในคอลัมน์ที่ล้มเหลว สิ่งนี้ทำให้มันแนะนำSingle byte signed intประเภทข้อมูล
    • หยุดที่ฉันแฟ้มแบนมา
    • ข้อผิดพลาดคือการแปลงข้อมูลล้มเหลว การแปลงข้อมูลสำหรับคอลัมน์ "จำนวน" ส่งคืนค่าสถานะ 2 และข้อความสถานะ "ไม่สามารถแปลงค่าได้เนื่องจากอาจสูญเสียข้อมูล"
  • ฉันได้พยายามใช้จะโยนคอลัมน์เป็น Derived ColumnDT_I4
    • หยุดที่ฉันคอลัมน์มา
    • ข้อผิดพลาดคือการแปลงข้อมูลล้มเหลว การแปลงข้อมูลสำหรับคอลัมน์ "จำนวน" ส่งคืนค่าสถานะ 2 และข้อความสถานะ "ไม่สามารถแปลงค่าได้เนื่องจากอาจสูญเสียข้อมูล"
  • ฉันได้พยายามใช้จะโยนค่าคอลัมน์ของฉันไป Data ConversionDT_I4
    • หยุดที่Data Conversionของฉัน
    • ข้อผิดพลาดคือการแปลงข้อมูลล้มเหลว การแปลงข้อมูลสำหรับคอลัมน์ "จำนวน" ส่งคืนค่าสถานะ 2 และข้อความสถานะ "ไม่สามารถแปลงค่าได้เนื่องจากอาจสูญเสียข้อมูล"
  • ฉันได้ลองเปลี่ยนความยาวของDT_STRมูลค่าในต้นทางและปลายทาง
    • หยุดที่ต้นทางหรือปลายทางขึ้นอยู่กับการตั้งค่า
  • ฉันลองเชื่อมต่อโดยใช้ตัวเชื่อมต่อแหล่งที่มาของ Excel แทนด้วยและไม่มีการIMEX=1เพิ่มลงในสตริงการเชื่อมต่อ ไม่มีโชค.

ความรู้สึกในการเขียนโปรแกรมของฉันบอกฉันว่าฉันเมา ฉันไม่เคยเจอปัญหาใหญ่อย่างนี้มาก่อนสำหรับเรื่องง่าย ๆ

และทำไมฉันจึงไม่สามารถเพิกเฉยต่อการสูญเสียข้อมูลที่เป็นไปได้ มันน่าผิดหวังจริง ๆ ที่พูดน้อย

ระบบของฉัน

เป็นเครื่อง Windows Server 2008 R2 ที่ติดตั้ง SQL Server 2008 ตัวเครื่องได้รับการอัพเดตอย่างสมบูรณ์ผ่านทาง Windows Update


ดูเหมือนว่าฉันมีปัญหากับค่า (แม้ว่าจะดึงจาก Access) และฉันต้องใช้หน้ารหัสเฉพาะเมื่อฉันส่งคอลัมน์ ฉันไม่สามารถเข้าถึงแพ็คเกจ SSIS อีกต่อไปเพื่อตรวจสอบสิ่งที่ฉันทำ

ชนิดข้อมูลของคอลัมน์ที่คุณพยายามแทรกAmountคืออะไร
Jon of All Trades

2
เปิดโปรแกรมจัดการการเชื่อมต่อไฟล์แบบเรียบสำหรับ CSV ไปที่แท็บขั้นสูงแล้วเลือกAmountคอลัมน์ ถ่ายภาพหน้าจอและโปรดอัปเดตคำถามของคุณด้วยภาพนี้
billinkc

มีโอกาสดูที่ตัวจัดการการเชื่อมต่อหรือยัง
billinkc

1
ฉันไม่เชื่อว่าคุณเมา แต่ไม่เห็นคำจำกัดความของตัวจัดการการเชื่อมต่อของคุณมันเป็นไปไม่ได้ที่จะพูด
billinkc

คำตอบ:


3

ฉันพบปัญหานี้สองสามครั้งและปัญหานี้ไม่สอดคล้องกับชนิดข้อมูลในพารามิเตอร์การส่งออก / นำเข้า สิ่งแรกที่ต้องทำคือตรวจสอบพารามิเตอร์เหล่านั้นโดยคลิกขวาที่แหล่งที่มาหรือปลายทางเลือกตัวแก้ไขขั้นสูง ไปที่คุณสมบัติอินพุทและเอาท์พุทและตรวจสอบประเภทข้อมูลของคอลัมน์นั้นสำหรับรายการทั้งหมด - ทั้งภายนอก, เอาท์พุทและอินพุต ฉันมักจะเห็นความแปรปรวนที่นี่บ่อยครั้งที่หนึ่งคือ Unicode (WSTR) และ I4 หรือ DSTR อื่น ๆ


8

ละเว้นข้อผิดพลาด

ก่อนอื่นคุณควรจะสามารถละเว้นการตัดทอนสตริงได้โดยไปที่ Flat File Source, Error Output จากนั้นเปลี่ยน "Fail Component" ภายใต้ "Truncation" เป็น "Ignore Error"

ทางออกที่ดีกว่า

ปัญหาที่แท้จริงอาจเป็นไปได้ว่าความยาวของสตริงภายในไปป์ไลน์ SSIS นั้นยังคงผิดเพราะได้เริ่มต้นแล้วในบางจุดก่อนหน้านี้

คุณสามารถตรวจสอบว่าเป็นกรณีนี้หรือไม่โดยดับเบิลคลิกที่ลูกศรสีเขียวจากแหล่งไฟล์แฟลตของคุณ (หรือหลังจากการแปลงคอลัมน์ / การแปลงข้อมูลที่ได้รับ) และเลือก "Meta Data" ที่นั่นคุณสามารถดูความยาวของสนามภายในท่อ

หากเห็นบ่อยครั้งว่าข้อมูลเมตาไม่ตรงกับองค์ประกอบของแหล่งที่มาอีกต่อไปส่วนใหญ่หากสร้างแหล่งข้อมูลไฟล์แบบแบนและการเชื่อมต่อที่สัมพันธ์กันผ่านวิซาร์ด

ข้อเสนอแนะของฉันคือการลบการเชื่อมต่อและแหล่งไฟล์แบบแฟลตและสร้างพวกเขาใหม่เนื่องจากฉันไม่พบวิธีในการปรับข้อมูลเมตาไปป์ไลน์ใหม่ด้วยส่วนประกอบแหล่งที่มา


2
สิ่งนี้ไม่ได้อยู่ภายใต้ "การตัด" ฉันลองแล้ว
Mathias Lykkegaard Lorenzen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.