2009-06-24 5 views
15

Ngắn câu chuyện ngắn, tôi đang lấy một loạt tài liệu excel từng cái một và nhập chúng bằng thuật sĩ Nhập/Xuất vào cơ sở dữ liệu trong SQL Server 2005.Lỗi cắt ngắn nhập vào SQL Server 2005 từ Excel

Dưới đây là một báo cáo (tất cả các quy trình không được hiển thị là "Thành công"). Có cách nào để tôi bỏ qua lỗi cắt ngắn không? Tôi đã googled xung quanh để avail không có, hoặc ít nhất là không có trong phiên bản của tôi.

- Executing (Success) 

- Copying to [Datadev].[dbo].[Sheet0$] (Error) 
    Messages 
    * Error 0xc020901c: Data Flow Task: There was an error with output 

cột "Giá trị Ý nghĩa Mô tả" (234) trên đầu ra "Excel Nguồn Output" (9). Trạng thái cột được trả về là: "Văn bản bị cắt ngắn hoặc một hoặc nhiều hơn ký tự không khớp với trang mã đích.". (SQL Server Import and Export Wizard)

* Error 0xc020902a: Data Flow Task: The "output column "Value 

Ý nghĩa Mô tả "(234)" thất bại vì cắt ngắn xảy ra, và cắt ngắn hàng bố trí trên "đầu ra cột "Giá trị Ý nghĩa Mô tả" (234)" chỉ định lỗi trên cắt ngắn. Lỗi cắt ngắn xảy ra trên đối tượng được chỉ định là thành phần được chỉ định. (Trình hướng dẫn xuất và nhập SQL Server)

* Error 0xc0047038: Data Flow Task: SSIS Error Code 

DTS_E_PRIMEOUTPUTFAILED. Phương thức PrimeOutput trên thành phần "Nguồn - Sheet0 $" (1) trả lại lỗi mã 0xC020902A. Thành phần trả về mã lỗi khi động cơ đường ống được gọi là PrimeOutput(). Ý nghĩa của mã lỗi là được xác định bởi thành phần, nhưng lỗi là gây tử vong và đường dẫn ngừng thực thi. Có thể có lỗi thư được đăng trước đây với thông tin thêm về lỗi này. (Trình hướng dẫn xuất và nhập SQL Server)

* Error 0xc0047021: Data Flow Task: SSIS Error Code 

DTS_E_THREADFAILED. Chủ đề "SourceThread0" đã thoát với lỗi mã 0xC0047038. Có thể có lỗi tin nhắn được đăng trước đây với nhiều thông tin hơn về lý do luồng có số bị thoát. (Trình hướng dẫn xuất và nhập SQL Server)

* Error 0xc0047039: Data Flow Task: SSIS Error Code 

DTS_E_THREADCANCELLED. Chủ đề "WorkThread0" đã nhận được tín hiệu tắt và đang kết thúc. Người dùng yêu cầu tắt máy hoặc lỗi trong số một luồng khác đang gây ra đường ống để tắt máy. Có thể có lỗi thư được đăng trước đây với nhiều thông tin hơn về lý do khiến thread bị hủy . (Trình hướng dẫn xuất và nhập SQL Server)

* Error 0xc0047021: Data Flow Task: SSIS Error Code 

DTS_E_THREADFAILED. Chủ đề "WorkThread0" đã thoát với lỗi mã 0xC0047039.Có thể có lỗi tin nhắn được đăng trước đây với nhiều thông tin hơn về lý do luồng có số bị thoát. (Trình hướng dẫn xuất và nhập SQL Server)

- Post-execute (Success) 
    Messages 
    * Information 0x402090df: Data Flow Task: The final commit for the 

chèn dữ liệu đã bắt đầu. (Trình hướng dẫn xuất và nhập SQL Server)

* Information 0x402090e0: Data Flow Task: The final commit for the 

chèn dữ liệu đã kết thúc. (Trình hướng dẫn xuất và nhập SQL Server)

- Cleanup (Success) 
    Messages 
    * Information 0x4004300b: Data Flow Task: "component "Destination - 

Sheet0 $ "(323)" đã viết 210 hàng. (Trình hướng dẫn xuất và nhập SQL Server)

Trả lời

8

Trình hướng dẫn sử dụng giá trị nhỏ hơn làm kích thước VARCHAR chuẩn cho dữ liệu Excel so với thuật toán trong SQL Server 2000. Kết quả là nó thường cắt ngắn dữ liệu mà bạn đang cố gắng nhập nhanh vào bảng dàn . Tuy nhiên, khi bạn thực hiện thuật sĩ, một màn hình sẽ hỏi bạn có muốn chỉnh sửa ánh xạ hay không và bạn có thể sửa kích thước của các trường ở đó. Hoặc bạn có thể tạo bảng stament trước để tạo một bảng làm việc với kích thước bạn muốn (nvarchar (max) là tốt nếu bạn đang xem dữ liệu lần đầu tiên và không biết các trường sẽ lớn như thế nào) và sau đó nhập vào nó. Với Excel, tôi biết mình cũng gặp vấn đề với SQl Server chỉ sử dụng một vài hàng để xác định kiểu dữ liệu và sau đó chèn không thành công cho các bản ghi (ví dụ như partnumber) vì nó dựa trên một vài bản ghi đầu tiên. thực sự là một loại chuỗi dữ liệu. Bạn cũng có thể gặp sự cố như thế này, vì vậy, bạn nên xem lại các ánh xạ ngay cả khi bạn không nhận được lỗi cắt ngắn.

+3

Tôi tiếp tục nhận được lỗi cắt ngắn với một trường có chứa các giá trị có độ dài tối đa là 10 caracters. Ngay cả khi tôi đặt lỗi cắt ngắn được bỏ qua cho trường, tôi vẫn gặp lỗi. Đây có phải là một vấn đề được biết đến? –

1

Tại sao bạn muốn bỏ qua lỗi? Tại sao không tìm thấy chúng và sửa chúng?

Ở bất kỳ mức nào, nếu bạn cần làm nhiều hơn thuật sĩ cung cấp, thì bạn nên sử dụng SSIS (Dịch vụ Tích hợp Máy chủ SQL) trực tiếp. Đó là những gì thuật sĩ đang sử dụng, chỉ có nó không thể giả định rằng các lỗi là ok.

Rất đơn giản để viết một gói SSIS để lặp qua các tệp Excel của bạn và nhập từng tệp một. Luồng dữ liệu nhập có thể được định cấu hình để bỏ qua lỗi hoặc làm điều gì đó khác với chúng, như báo cáo chúng.

+0

Đây là một nhiệm vụ nhỏ mà tôi đang thực hiện với tổng số hàng nghìn cột. Nó có phần bất hợp lý (trong tình huống của tôi) để sửa từng người bằng tay. Cảm ơn thông tin SSIS. – scrot

+0

Làm thế nào hợp lý nó sẽ phụ thuộc vào mức độ thường xuyên vấn đề xảy ra và những gì đang gây ra nó. Ví dụ: nếu bạn xem xét kỹ các thông báo lỗi đó, bạn sẽ thấy đây là trang cắt ngắn _or_ không chính xác. Cái cũ có thể chỉ là vấn đề sử dụng một cột rộng hơn; sau này có thể là một câu hỏi về một vài ký tự không phải ASCII. –

15

Khi tôi nhận được lỗi cắt ngắn, tôi chèn 8 hàng giả. Mỗi ô có văn bản rác có chiều dài> 256. Điều này buộc loại dữ liệu được phát hiện là varchar (max) thay vì varchar (256). Nếu một hàng là một cột số, tôi phải điền nó với một số (ví dụ, 0) và nếu đó là một ngày, tôi phải điền vào một ngày giả hoặc các cột khác sẽ nhập với dữ liệu rỗng.

Sau đó tôi xóa các hàng rác sau khi nhập.

+2

Điều đó đã làm cho tôi, đơn giản và hiệu quả. Tuy nhiên, một hàng giả là đủ. – Olaf

+1

Trong trường hợp của tôi, nó là đủ để chỉnh sửa hàng đầu tiên theo cách này và không 8. –

+1

Đây là phản ứng tốt nhất, ngay cả đối với SQL Server 2012+ – CSS

1

Để nhập không thường xuyên dữ liệu Excel, CSV hoặc văn bản vào SQL Server khi gặp lỗi cắt ngắn, tôi khuyên bạn nên nhập dữ liệu vào MS Access trước và sau đó sử dụng trình hướng dẫn tăng kích cỡ để tạo và điền bảng trực tiếp vào SQL.

5

Here's điều gì đã hiệu quả đối với tôi.

Điều này là do cài đặt tuyệt vời trong Excel trong sổ đăng ký của bạn, chỉ kiểm tra 8 hàng dữ liệu đầu tiên trong bảng tính của bạn để xác định kích thước cột cho phần còn lại của tất cả dữ liệu. Việc sửa lỗi này là sửa đổi sổ đăng ký của bạn để đặt nó từ 8 thành 0. Khi được đặt thành 0, nó sẽ kiểm tra toàn bộ bảng tính.Điều này có thể gây ra một số vấn đề hiệu suất trong quá trình nhập dữ liệu ban đầu nếu tệp quá lớn. Đây là chìa khóa registry để tìm kiếm (có thể có nhiều hơn một mà cần phải được thiết lập):

TypeGuessRows

+0

Điều này giải thích nó. Không cần phải chèn các hàng giả, bởi vì bạn sẽ cần xóa các hàng giả sau này. Thay vào đó, tạo một cột bổ sung trong tệp excel của bạn, các ký tự thực hiện đếm "= LEN (ô #) trên cột không thành công, sau đó sắp xếp cột đó theo DESCENDING. Bằng cách này, ô có hầu hết các ký tự sẽ nằm trên các hàng trên cùng, nhập khẩu .... hy vọng nó sẽ giúp. – Milacay

4

http://support.microsoft.com/kb/281517

Để thay đổi giá trị của TypeGuessRows, sử dụng các bước sau: 1. Trên menu Bắt đầu, bấm Chạy. Trong các Chạy hộp thoại, loại Regedt32, sau đó bấm Ok. 2.Open các khóa sau trong Registry editor:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Excel

Lưu ý Đối với hệ thống 64-bit, các phím tương ứng như sau:

HKLM \ SOFTWARE \ wow6432node \ microsoft \ jet \ 4.0 \ engines \ excel 3.Nhấp đúp vào TypeGuessRows. 4. Trong hộp thoại trình soạn thảo DWORD, bấm Thập phân dưới Cơ sở. Nhập giá trị trong khoảng từ 0 đến 16, cho dữ liệu Giá trị. 5.Nhấn OK, và sau đó thoát khỏi Registry Editor. Cách thứ hai để khắc phục sự cố này (không sửa đổi sổ kiểm nhập) là đảm bảo rằng các hàng có các trường có dữ liệu 255 ký tự trở lên, có mặt trong 8 hàng đầu tiên của tệp dữ liệu nguồn.

+0

Trên máy tính nào? máy thi hành hoặc nơi cài đặt sql? –

0

Trong thuật sĩ nhập SQL Server ngay khi bạn đến phần mà bạn cần chỉ định tệp bạn đang sử dụng để nhập dữ liệu, hãy nhấp vào tùy chọn "Nâng cao". Điều này sẽ cho bạn thấy tất cả các trường trong tệp đầu vào của bạn cùng với các thuộc tính trường. Thuộc tính bạn cần thay đổi là "DataType". Nó thường mặc định là "chuỗi [DT_STR]". Nếu bạn thay đổi nó thành "dòng văn bản [DT_TEXT]", bạn sẽ tăng kích thước của trường một cách đáng kể và do đó rất có thể sẽ tránh được lỗi cắt ngắn.