Truncation errors importing to SQL Server 2005 from Excel

浪子不回头ぞ 提交于 2019-12-18 12:54:42

问题


Long story short, I'm taking a bunch of excel documents one by one, and importing them using the Import/Export wizard into a database in SQL Server 2005.

Here's one report (all processes not shown are a "Success"). Is there any way for me to ignore truncation errors? I've googled around to no avail, or at least not in my version.

- Executing (Success)

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

column "Value Meaning Description" (234) on output "Excel Source Output" (9). The column status returned was: "Text was truncated or one or more characters had no match in the target code page.". (SQL Server Import and Export Wizard)

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

Meaning Description" (234)" failed because truncation occurred, and the truncation row disposition on "output column "Value Meaning Description" (234)" specifies failure on truncation. A truncation error occurred on the specified object of the specified component. (SQL Server Import and Export Wizard)

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

DTS_E_PRIMEOUTPUTFAILED. The PrimeOutput method on component "Source - Sheet0$" (1) returned error code 0xC020902A. The component returned a failure code when the pipeline engine called PrimeOutput(). The meaning of the failure code is defined by the component, but the error is fatal and the pipeline stopped executing. There may be error messages posted before this with more information about the failure. (SQL Server Import and Export Wizard)

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

DTS_E_THREADFAILED. Thread "SourceThread0" has exited with error code 0xC0047038. There may be error messages posted before this with more information on why the thread has exited. (SQL Server Import and Export Wizard)

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

DTS_E_THREADCANCELLED. Thread "WorkThread0" received a shutdown signal and is terminating. The user requested a shutdown, or an error in another thread is causing the pipeline to shutdown. There may be error messages posted before this with more information on why the thread was cancelled. (SQL Server Import and Export Wizard)

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

DTS_E_THREADFAILED. Thread "WorkThread0" has exited with error code 0xC0047039. There may be error messages posted before this with more information on why the thread has exited. (SQL Server Import and Export Wizard)

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

data insertion has started. (SQL Server Import and Export Wizard)

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

data insertion has ended. (SQL Server Import and Export Wizard)

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

Sheet0$" (323)" wrote 210 rows. (SQL Server Import and Export Wizard)


回答1:


The wizard uses a smaller value as the standard varchar size for Excel data than you got in the wizard in SQL Server 2000. As a result it often truncates data that you are trying to do a quick import to a staging table on. However, when you do the wizard, one screen will ask you if you want to edit mappings and you can fix the size of the fields there. Or you can usea create table stament first to create a work table with the sizes you want (nvarchar(max) is good if you are looking at the data for the first time and have no idea how big the fields will be) and then import into it. With Excel, I know I have also had issues with SQl Server using only a few rows to determine datatype and then the insert failing for records (say for something like partnumber) because it thought based on the first few records it was an integer when it was really a string type of data. You also could be having an issue like this, so it is a good idea to review the mappings anyway even if you don't get truncation errors.




回答2:


When I get truncation errors, I insert 8 dummy rows. Each cell has junk text with length > 256. This forces the detected data type to be varchar(max) instead of varchar(256). If a row is a number column, I have to fill it in with a number (for example, 0) and if it is a date, I have to fill in a dummy date or else the columns will import with null data.

I then delete these junk rows after the import.




回答3:


Here's what worked for me.

This is due to a wonderful setting within Excel in your registry that tells it to only check the first 8 rows of data within your spreadsheet to determine the column size for the remainder of all the data. The fix for this is to modify your registry to set it from 8 to 0. When it’s set to 0 it will check the entire spreadsheet. This may cause some performance issues during the initial data import if the file is extremely large. Here is the the registry key to search for (there may be more than one that needs to be set):

TypeGuessRows




回答4:


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

To change the value of TypeGuessRows, use these steps: 1.On the Start menu, click Run. In the Run dialog box, type Regedt32, and then click OK. 2.Open the following key in the Registry editor:

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

Note For 64-bit systems, the corresponding key is as follows:

HKLM\SOFTWARE\wow6432node\microsoft\jet\4.0\engines\excel 3.Double-click TypeGuessRows. 4.In the DWORD editor dialog box, click Decimal under Base. Type a value between 0 and 16, inclusive, for Value data. 5.Click OK, and then exit the Registry Editor. A second way to work around this problem (without modifying the registry) is to make sure that rows with fields, which have data 255 characters or greater, are present in the first 8 rows of the source data file.




回答5:


Why do you want to ignore errors? Why not find them and fix them?

At any rate, if you need to do more than the wizard provides, then you should use SSIS (SQL Server Integration Services) directly. That's what the wizard is using, only it can't assume that errors are ok.

It's very simple to write an SSIS package to loop over your Excel files and import them one at a time. The import data flow can be configured either to ignore errors, or to do something else with them, like report them.




回答6:


For occasional imports of Excel, CSV or text data into SQL Server where truncation errors are being experienced, I would suggest importing the data into MS Access first and then using the up-sizing wizard to create and populate the table directly in SQL.




回答7:


In SQL Server Import Wizard as soon as you get to the section where you need to specify the file you are using to import data click on the "Advanced" options. This will show you all the fields in your input file together with the field properties. The property you need to change is "DataType". It usually defaults to "string[DT_STR]". If you change it to "text stream[DT_TEXT]" you will increase the size of the field substantially and therefore will most likely avoid the truncation error.



来源:https://stackoverflow.com/questions/1039385/truncation-errors-importing-to-sql-server-2005-from-excel

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!