SSIS บังคับให้เปลี่ยนสตริงแหล่ง excel เพื่อลอย


9

มีคอลัมน์ใน Excel ที่ควรจะเป็นข้อความ แต่ SSIS เห็นข้อความที่เป็นตัวเลขอยู่ที่นั่นและทำให้เป็นทศนิยมสองเท่าที่มีความแม่นยำโดยอัตโนมัติ [DT_R8]

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

Error at Extract Stations [Excel Source [1]]: The data type for "output "Excel Source Error Output" (10)" cannot be modified in the error "output column "Group No" (29)".
Error at Extract Stations [Excel Source [1]]: Failed to set property "DataType" on "output column "Group No" (29)".

ฉันได้ลองแก้ไขแพ็คเกจ xml แล้ว ฉันลองIMEX=1แล้วtypeguessrow=0แต่ไม่มีสิ่งใดที่สามารถแก้ไขปัญหาของฉันได้ สิ่งนี้มีการแก้ไขหรือไม่? นอกจากนี้ยังมีบทความแนะนำให้คุณแก้ไขรีจิสตรีของคุณเพื่อให้ excel อ่านได้มากกว่า 8 แถวเริ่มต้นก่อนที่จะเดาชนิดข้อมูล ฉันไม่ต้องการที่จะไปเส้นทางนี้เพราะแม้ว่ามันจะทำงานแล้วฉันจะต้องแก้ไขรีจิสทรีในเครื่องที่ฉันวางแผนที่จะเรียกใช้แพคเกจบน

เขตข้อมูล excel ที่จะนำเข้าสู่เขตข้อมูล SQL nvarchar จะอ่านเช่นกัน

295.3
296.33

แต่จะถูกเขียนลงในตาราง SQL ดังนี้

295.30000000000001
296.32999999999998

ฉันใส่ในดาต้าวิวและฟิลด์แสดง

295.3
296.33

ทุกวิธีผ่านการประมวลผลที่ถูกต้อง แต่ฉันเดาว่าเมื่อมันมาถึง OLE DB Destination source มันจะแปลงมันเป็น

295.30000000000001
296.32999999999998

ซึ่งผิด

ฉันยังมีค่าเช่น V321.1 และ V213.34 เช่นซึ่งแน่นอนไม่ใช่จำนวนเต็มและต้องเก็บไว้เป็น varchar


ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท
พอลไวท์ 9

คำตอบ:


2

เป็นไปได้ไหมที่จะรับไฟล์เป็นไฟล์. csv ซึ่งสามารถนำเข้าเหมือนไฟล์ข้อความและจะไม่มีปัญหานี้? ฉันมักจะเปิดไฟล์ Excel ทั้งหมดและขอรูปแบบอื่นเพราะ SSIS และ Excel เล่นได้ไม่ดีในหลาย ๆ ระดับ


1
ฉันกำลังจะเปลี่ยนแปลงไฟล์. csv หรือ txt ในอนาคตอันใกล้ จะทำให้สิ่งต่าง ๆ ง่ายขึ้นมาก
Juan Velez

2

ดูเหมือนว่าไม่มีวิธีแก้ไขปัญหานี้ Excel จะดูข้อมูลสองสามแถวแรกในคอลัมน์และจะบังคับประเภทข้อมูลให้ลอยอยู่เสมอไม่ว่าจะเกิดอะไรขึ้น ฉันได้รับโซลูชันในการสร้างเทมเพลตที่มีอักขระ varchar สองสามตัวในแถวแรก (8+) ดังนั้น EXCEL จะเลือกว่าเป็นประเภทข้อมูลแล้วนำเข้าข้อมูลของฉัน สิ่งที่ช่วยคือเมื่อฉันใช้ Source Safe ฉันสามารถ "Check In" ไฟล์เพื่อให้ไฟล์แพ็คเกจของฉัน "อ่านอย่างเดียว" เพื่อให้ Visual Studio ไม่สามารถเปลี่ยนชนิดข้อมูลที่กำหนดไว้ล่วงหน้าได้


1

ขั้นตอนที่ 1: เพิ่มIMEX=1; MAXROWSTOSCAN=0ในสตริงการเชื่อมต่อ (เช่นProvider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Source\filename.xlsx;Extended Properties="EXCEL 12.0 XML;HDR=YES;IMEX=1; MAXROWSTOSCAN=0")

ขั้นตอนที่ 2: ปิดโซลูชัน เปิดแพ็คเกจ SSIS ในเท็กซ์เอดิเตอร์ค้นหาคอลัมน์ที่เก็บย้อนกลับไปยังชนิดข้อมูลที่กำหนดไว้ล่วงหน้า อัปเดตด้วยตนเองในไฟล์ XML เป็นรูปแบบที่ต้องการ

ขั้นตอนที่ 3: เปิดแพ็คเกจใน SQL Server Data Tool และดำเนินการตอนนี้คุณควรจะสามารถโหลดข้อมูลได้เหมือนเดิมจากไฟล์


ขออภัย แต่ประเภทแหล่งข้อมูลไม่ได้อยู่ในแพ็คเกจ ประเภทคอลัมน์ปลายทางเท่านั้น สิ่งนี้จะเอาชนะวัตถุประสงค์อีกครั้งเนื่องจากการแปลงยังคงเกิดขึ้นข้างไดรเวอร์ Microsoft.Ace (หรือตัวเลือกใดก็ได้ที่มีไดรเวอร์) และการสูญเสียข้อมูลเกิดขึ้นแล้วตามเวลาที่เข้าสู่ SSIS และตารางปลายทาง
วิศวกรที่กลับรายการ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.