2011-12-25 18 views
49

Tôi có một tệp excel với bốn cột văn bản: một trong số chúng được gọi là ShortDescription có giá trị dài nhất. Tôi đã tạo một bảng trong cơ sở dữ liệu SQL Server 2008, với bốn cột và kiểu cột ShortDescription được đặt thành NvarChar (Max).Văn bản bị cắt bớt hoặc một hoặc nhiều ký tự không khớp trong trang mã đích Khi nhập từ tệp Excel

nhưng khi sử dụng hộp thoại nhập và xuất SSIS, tôi tiếp tục nhận được lỗi được đề cập trong tiêu đề, ngay cả khi tôi đặt tùy chọn OnTruncation thành Bỏ qua.

Tôi đã cố gắng xóa dữ liệu cột và đã thành công (vì vậy tôi đã đảm bảo rằng sự cố nằm trong cột ShortDescription). Tôi đã cố gắng sao chép toàn bộ dữ liệu sang một cuốn sách công việc khác, và vẫn không có may mắn.

bất kỳ ý tưởng nào ???

Trả lời

60

Tôi cho rằng bạn đang cố nhập dữ liệu này bằng cách sử dụng Nguồn Excel trong hộp thoại SSIS?

Nếu có, vấn đề có thể là SSIS lấy mẫu một số hàng ở đầu bảng tính của bạn khi nó tạo nguồn Excel. Nếu trên cột [ShortDescription] nó không nhận thấy bất cứ điều gì quá lớn, nó sẽ mặc định là một cột văn bản ký tự 255.

Vì vậy, để nhập dữ liệu từ một cột có chứa hàng với số lượng lớn các dữ liệu mà không cắt ngắn, có hai lựa chọn:

  1. Bạn phải chắc chắn rằng [SHORTDESCRIPTION] cột trong ít nhất một trong những mẫu các hàng có giá trị dài hơn 255 ký tự. Một cách để làm điều này là sử dụng hàm REPT(), ví dụ: = REPT ('z', 4000), sẽ tạo ra một chuỗi 4000 chữ 'z'.
  2. Bạn phải tăng số hàng được trình điều khiển Jet Excel lấy mẫu để bao gồm một hàng như vậy. Bạn có thể tăng số lượng hàng được lấy mẫu bằng cách tăng giá trị của TypeGuessRows trong số HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel (nếu hệ thống của bạn là x64 sau đó dưới HKEY_LOCAL_MACHINE\SOFTWARE\wow6432node\Microsoft\Jet\4.0\Engines\Excel) khóa đăng ký.

Bạn có thể xem thêm thông tin tại hai liên kết sau đây:

Để giải thích thêm, SSIS tạo 3 đối tượng đằng sau hậu trường của wizard, Excel đối tượng nguồn dữ liệu, đối tượng đích bảng SQL và toán tử luồng dữ liệu giữa chúng. Đối tượng nguồn Excel xác định dữ liệu nguồn và tồn tại độc lập với hai đối tượng khác. Vì vậy, khi nó được tạo ra, lấy mẫu tôi mô tả được thực hiện và kích thước cột nguồn được thiết lập. Vì vậy, vào thời điểm toán tử luồng dữ liệu thực hiện và cố gắng kéo dữ liệu từ excel để đưa vào bảng của bạn, nó đã xem xét một nguồn dữ liệu bị giới hạn trong 255 ký tự.

+3

thật đáng kinh ngạc !!! nhưng tại sao điều đó xảy ra nếu cột đích được đặt để chấp nhận độ dài tối đa của dữ liệu ?? Vậy chiều dài của cột nguồn phải làm gì với nó? –

+7

"Lưu ý Đối với hệ thống 64 bit, khóa tương ứng như sau: 'HKLM \ SOFTWARE \ wow6432node \ microsoft \ jet \ 4.0 \ engines \ excel'" - [liên kết] (http://support.microsoft.com/ kb/281517) Nhưng dường như giá trị chỉ có thể lên đến 16? Dường như không có nhiều cải tiến - nhưng tôi chưa thử nghiệm nó. – PeterX

28

Tôi gặp sự cố này khi nhập từ tệp được phân tách bằng phẳng vào SQL Server. Giải pháp là cập nhật giá trị 'OutputColumnWidth' cho cột vi phạm (từ thông báo lỗi). Trên biểu mẫu 'Chọn nguồn dữ liệu' trong trình hướng dẫn nhập, nguồn của tôi là tệp phẳng. Trên ngăn bên trái, chọn 'Nâng cao'. Sau đó, bạn có thể đặt thuộc tính của các cột riêng lẻ. Trong trường hợp của tôi, 'OutputColumnWidth' cho hầu hết các cột của tôi đã được mặc định là '50'. Tôi chỉ đơn giản cập nhật nó thành một giá trị lớn hơn mà sẽ không cắt bớt giá trị từ tệp phẳng.

enter image description here

+3

Ngoài ra, thay vì đoán một giới hạn đủ lớn cho một DT_STR, bạn có thể chọn loại DT_NTEXT SSIS, tương đương với MSSQL nvarchar (tối đa) hoặc các kiểu ntext lỗi thời. – eidgenossen

+0

Một sự kết hợp của việc cập nhật OutputColumnWidth và sử dụng DataType DT_WSTR làm việc cho tôi. Trong SQL Server 2014, DT_WSTR có thể có một OutputColumnWidth lên đến 4.000 ký tự Unicode rộng. Điều này dẫn đến một cái gì đó tương tự như câu trả lời của 40-Love dưới đây. – Jasper

+0

Bạn có thể thay đổi tất cả các cột này cùng một lúc không? Tôi có một số lượng lớn các cột và tôi đã tự hỏi nếu điều này là có thể. – Lostaunaum

5

tôi đã nhận lỗi này khi tôi đã cố gắng để nhập khẩu một tập tin lớn mà đã có một số ký tự Trung Quốc trong nó, và cũng có một số chuỗi (lớn) không hợp lệ.

Tệp văn bản đã được lưu ở định dạng UTF8.

thiết lập của tôi:

Trên Tùy chọn chung (không thay đổi bất cứ điều gì):

- Locale: English (United States) 
- Unicode: Unchecked 
- Code Page: 65001 (UTF-8) 

Có một Tùy chọn nâng cao ở bên trái

- DataType (for column): Unicode String [DT_WSTR] (changed) 
- OutputColumnWidth: 4000 (that's the maximum) (changed) 

On Review Data Type Lập bản đồ

- On Error: Ignore 
- On Truncation: Ignore 

Cột mục tiêu của tôi có chiều rộng = 50.

Tôi không gặp lỗi nào với các cài đặt này.

+0

Cảm ơn bạn đã đăng bài này. Tôi đã nhận được thông báo lỗi tương tự trong quá trình nhập của mình, do sự cố được đề cập ở trên: cố nhập dữ liệu có ký tự nước ngoài vào các trường có loại dữ liệu không chấp nhận ký tự nước ngoài. Sửa chữa của tôi, ngắn hạn, là để loại bỏ các ký tự nước ngoài từ các dữ liệu tôi đã cố gắng để nhập khẩu. – cjo30080

7

Cách đơn giản để làm cho nó hoạt động là chỉnh sửa tệp bạn muốn nhập và tạo hàng mới ở vị trí đầu tiên. Bằng cách đó, nó sẽ luôn luôn được lấy mẫu. Sau đó, đối với bất kỳ cột nào có thể có> 255 ký tự, chỉ cần thêm 255 ký tự vào ô và nó sẽ hoạt động. Sau khi bạn nhập, chỉ cần xóa hàng rác mà bạn đã thêm vào.

+2

Đây là con đường ngắn nhất để thành công cho tôi. –

+0

Hmmm, không chắc chắn cách thức này khác với giải pháp. Giải pháp này có vẻ thích hợp hơn cho stackexchange. ~ (: – dcary

1

Có một vị trí thay thế của thành phần đăng ký cần được thay đổi để giải quyết vấn đề này.

Nếu bạn không thể tìm thấy nó ở

Start-> Run-> RegEdit-> HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Excel

sau đó tìm trong

Bắt đầu -> RUN–> RegEdit–> HKEY_LOCAL_MACHINE -> PHẦN MỀM -> Wow6432Node -> Microsoft -> Máy bay phản lực -> 4.0 -> Công cụ -> Excel

1

Đối với tôi liên kết này đã giúp tôi: https://support.microsoft.com/en-us/kb/189897

  1. Sao chép hàng có giá trị của ô> 255 ký tự với đầu của excel, làm cho điều đó hàng hàng đầu tiên trong excel
  2. thay đổi giá trị đăng ký từ liên kết ở trên.
Các vấn đề liên quan