SSIS truncation error when column length is more than enough - csv

I have a .csv flat file which I am trying to import using flat file source in a data flow. I am getting truncation errors which do not seem possible. As far as I can tell the specified column lengths are more than enough for all of the data.
For instance, the error I am currently looking at is:
[FF_SRC Unicode File [237]] Error: Data conversion failed. The data conversion for column ""MIC"" returned status value 4 and status text "Text was truncated or one or more characters had no match in the target code page.".
and
[FF_SRC Unicode File [237]] Error: An error occurred while processing file "C:[file path]" on data row 14.
The entry for column MIC in data row 14 is "varuna". The column MIC is set to length 100 in the connection manager and the external and output columns of the flat file source.
I have verified that the column widths specified in SSIS are more than enough for all of the incoming data. I opened the .csv in excel and got the max length for each column and rounded it up. I verified that excel did not change the data (there was one column for which it did and I have accounted for that).
I verified these values in the advanced tab of the connection manager and the "input and output properties" of the flat file source component for external and output columns.
When I run the package, it will fail due to a truncation error. It tells me the column. I verify that length specified is more than enough for that column, but then increase it anyway. When I run it again it will pass the particular value that caused the error (the one I just "fixed") but fail a few values later. There is no particular column or row causing the issue.
I even set the length to 100 for every column expect one, which should be way more than enough. (The one exception column is set to length 400 because it's values are usually 200-300 characters. This column has never caused me an issue). The longest value in the file outside of the 400 character column is 42 characters.
Edit: After setting the column lengths to 1000 the package runs successfully. I still can't explain why 1000 would work when 100 did not, both of them should be more than double what is necessary. I don't consider this a solution because I would rather not waste that memory.

Related

Returned status value 4 and status text "Text was truncated or one or more characters had no match in the target code page

I downloaded the flat file from the FDA official site. The file is NDC Database File - Text Version (Zip Format).
I unzipped it and got product.txt.
I tried to import it into my database using SSIS.
All columns were varchar(max).
SSIS failed with the error message:
[Flat File Source 2] Error:
Data conversion failed. The data conversion for column "PHARM_CLASSES" returned status value 4 and status text "Text was truncated or one or more characters had no match in the target code page.".
I have no solution and need help please.
I was simulated your process, so the problem is that for some reason the "Flat File Connection Manager" recognize the "columns width" as 50 for all the columns(the actual size is more than that),
and you have more than one "problematic column" like (LABELERNAME, SUBSTANCENAME, etc.)
So for each such column change the "columns width" to 3000 and it will work for you.
If you want to be more specific you can open the file on excel and find the MAX LEN per column and then change the "columns width" respectively.
varchar max can hold around 8000 characters, so you can go with increasing output column width.
You also need to be extra conscious about field tyes very specific dates and try to pass it NULL in case it is not available in source data.

An error occurred while attempting to perform a type cast

Hi I am trying to load data from a csv to sql server. The data types in flat file source external and output are (DT_STR,50). I am converting them to their respective data types in a derived column and trying to send all the wrong fields to an error file. But when I am trying to load. I am getting the following error.
Error: 0xC0049064 at Data Flow Task, Derived Column [668]: An error occurred while attempting to perform a type cast.
Error: 0xC0209029 at Data Flow Task, Derived Column [668]: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR.
The field on which it is failing is 0.234 I am trying to convert it from (DT_STR,50) to (DT_NUMERIC,7,5). I do not understand why this is failing. Please help.
Unfortunately, SSIS throws some pretty generic errors and there are probably dozens of ways you can encounter this one.
I ran into this when I was unaware that my flat file contained a footer that contained a different set of fields than the normal data rows.
I discovered this after I redirected my error rows to a Multicast and enabled the data viewer on my output which let me see what was failing.
In my case, I could see that I had a footer with a reliable value that I could detect with a Conditional Split to skip it. After that, my numeric cast in the derived column behaved correctly.
It's likely that at least one of the values in your (DT_STR,50) field cannot fit (DT_NUMERIC,7,5) because it has more that 7 number characters. Enable a Data Viewer on the path that's inputting into the Data Conversion step and you will probably see what I mean (depending on buffer size, you will likely have to sort on the string field in question). If you don't see one that's too long, buffer though until you do and buffer again, at which time the Data Conversion step will fail.
I had this same error thrown while trying to convert an INT that was too big for the NUMERIC length and precision I was casting to.

SQL Error while importing Data From Excel [closed]

Closed. This question needs debugging details. It is not currently accepting answers.
Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question.
Closed 2 years ago.
Improve this question
I am importing Data from excel sheet. I am struggling with the following problems -
Executing (Error) Messages Error 0xc020901c: Data Flow Task 1: There was an error with output column "Intelligence" (21) 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 1: The "output column "Intelligence" (21)" failed because truncation occurred, and the
truncation row disposition on "output column "Intelligence" (21)"
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 1: SSIS Error Code DTS_E_PRIMEOUTPUTFAILED. The PrimeOutput method on component "Source - MainSheetData$" (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)
I was banging my head against the wall with this same exact error.
Try importing into MS Access and then importing into SQL Server.
turns out it only checks first 8 rows or so of the Excel sheet..so if it decides length is 225 and later on encounters more than 225 chars an error occurs , what I did to solve the problem was make a first fake row containing the worst scenario (max of everything) and problem solved !
The first error is telling you that your source data for the Intelligence column is either longer than your target column or contains charachers that your target column cannot accept.
The second error is telling you that the Intelligence column is longer than your target column and therefore its failing. I expect this is the true issue.
You can either
expand the size of your target column to cover the larger input
or
switch the Error Output of the component to "Ignore failure" on Truncation
I was having the very same issue, and although I tried numerous suggestions from searching here, the option that worked for me was to convert the excel file to a CSV and use a bulk insert command instead.
This bypassed the need to edit mappings which wasn't working for me. I had a field that was not updating when I changed the field type.
Code below from this answer:
BULK INSERT TableName
FROM 'C:\SomeDirectory\my table.txt'
WITH
(
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n'
)
GO
Importing using CSV is difficult as the import process doesn't know the max length for any field. Therefore when it hits a row longer than the initial column length it errors.
Simply save your csv file as a excel workbook and re import. You'll need to delete an existing tables that were created before failute last time.
As it's excel, it can obtain the correct field length when creating the table.
I was getting the same error while importing from Excel to SQL Server 2008. I was able to do it by exporting from xlsx to csv and then importing the csv file into Sql Server. Yes, I had to adjust the columns length by hand but it worked just fine!
I was having the same problem and had to manually go through Excel to find the problem. One time saver, if you click Report -> View Report at the bottom, it will open up a new window. If you scroll all the way to the bottom of the report, it will tell you how many rows were processed. It doesn't necessarily mean that the problem is in the next row, but at least you can skip going through all the rows before that.
What I did next in Excel was take only the amount of characters that would fit into SQL (i.e. LEFT([Column], 255) and truncate the rest.
It is not ideal, but it worked in my case.
Export
You need to change "On Error" option to Ignore and "On Truncation" option to Ignore in Review Data Type Mapping.
This will solve the problem.
I am not sure, if anyone has tried this or not:
Copy the content of the file from excel .xls or whatever excel format it is in currently and paste it into new excel file as value. Save the file in .xlsx format and try importing again with sql server.
It will be a success!!
It is enough to place the biggest length in the first row. Then it functions.

SSIS data conversion failed

I am getting this error when trying to execute the SSIS package.
[Flat File Destination [22]] Error: Data conversion failed. The data
conversion for column "DC" returned status value 4 and status text
"Text was truncated or one or more characters had no match in the
target code page.".
The column is of size 10 and I want that to be 4 in output, I had that set in my flat file but is not working.
Please advise where I am going wrong.
Regards
V.
If you don't want to mess with the Flat File properties, you could trim the value in your data source. IE SELECT SUBSTRING(Column,1,4) AS Column FROM Table.
SSIS Error: Data conversion failed. The data conversion for column “”RECIPIENT”” returned status value 4 and status text “Text was truncated or one or more characters had no match in the target code page.
Answer:-
(1) Just Right Click on Connection string for your Flat file source and got advanced column and find "RECIPIENT" Column properties update Column size with actual size like from 50 to 100.
(2) Right Click on Flat File Source and choose “Show Advanced Editor”
Go to “Input and Output Properties “ Tab
Expand “Flat File Source Output” and choose “External Columns”
(3) Select column that is causing this error (In my case column is “RECIPIENT” as per above error message) and on right hand side, increase length say 100 or 200 or depending on your column length
(4) Now select “Output Columns” and select same column as above and make this value same as we did in Step 4, in my case its 200 as shown below.
(5) Run It works.

Importing a tab delimited file in SSIS with one field bigger than 255 characters

I am importing a tab delimited file and get this error .
Error: 0xC02020A1 at Task 3 - Data Load for Core Data, Flat File
Source [14]: Data conversion failed. The data conversion for column
"Column 85" returned status value 4 and status text "Text was
truncated or one or more characters had no match in the target code
page.".
Error: 0xC020902A at Task 3 - Data Load for Core Data, Flat File
Source [14]: The "output column "Column 85" (448)" failed because
truncation occurred, and the truncation row disposition on "output
column "Column 85" (448)" specifies failure on truncation. A
truncation error occurred on the specified object of the specified
component. Error: 0xC0202092 at Task 3 - Data Load for Core Data, Flat
File Source [14]: An error occurred while processing file
"C:\Metrics\report-quoteCoreData.csv" on data row 540. Error:
0xC0047038 at Task 3 - Data Load for Quote Core Data, SSIS.Pipeline:
SSIS Error Code DTS_E_PRIMEOUTPUTFAILED. The PrimeOutput method on
component "Flat File Source" (14) returned error code 0xC0202092. 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
When I set truncation error ignore on one of the fields it seems to import .
Unfortunately I get
Column A ( customer ) Column B ( Location ) Column C ( should be Y or N )
Jimmy New York ssssss ( instead of Y )
On this row I have an earlier field which goes over 255 characters and causes the ERROR above in SSIS. If I tell it to ignore the error , I get the wrong data inserted for that row . "Ssss ...." is the field where it goes over 255 characters.
What is the solution here?
Within your Flat File Connection Manager, you will need to adjust the OutputColumnWidth property of every column that is not sufficient to hold the incoming values. In your example, Column 85 is currently defined at 255 characters so bump it up to a reasonable value. The goal is to make that value large enough to cover the incoming data but not so large that you're wasting memory space.
Once you change your Connection Manager, any dataflow's that use the same CM will report back that the column definition has changed and you will need to go into them, double click and let the new meta-data trickle down.
I have seen situations where the metadata does not automatically refresh after certain types of transformations (Union All I'm looking at you). As a sanity check, double click on the connector immediately preceding your Destination (probably OLE DB Destination). Click the Metadata tab and ensure Column 85 is 500 or whatever value you assigned. If it's not, then you get to work your way back up the chain to find out where it's stuck. Simplest resolution is usually to delete the troubling transformation and re-add it.
I have faced this issue while importing an CSV file with a field containing more than 255 characters, I solved the issue using python.
simply import the CSVin a pandas data frame and then calculate the length of each of those string values per row
then sort the dataframe in descending order. This will enable SSIS to allocate maximum space for that field as it scans the first 3 rows to allocate storage
df = pd.read_csv(f,sheet_name=0,skiprows = 1)
df = df.drop(df.columns[[0]], axis = 1)
df['length'] = df['Item Description'].str.len()
df.sort_values('length', ascending=False, inplace=True)
writer = ExcelWriter('Clean/Cleaned_'+f[5:])
df.to_excel(writer,sheet_name='Billing',index=False)
writer.save()