What I have done in the past is to do the load into a temporary table and have all the columns as character-based with max-length allowed / expected. Then, after all the input columns, I would add the columns as their final data format so they wont have any impact on import stream / comma/tab delimited format.
Once the data is imported into the temp table, then run an update query to get to the final format of int, decimal, float, bit, date/time, etc.
Finally, if all goes well, then you can do all your queries or insert into from the select from the temp file as needed for final import.
Ex:
temp table has
FirstName varchar(20),
LastName varchar(20),
BirthDateText varchar(10),
SalaryText varchar(10),
AnyOtherColumns varchar(10),
RealBirthDate Timestamp
Salary decimal
So, the import fills up from FirstName
to the AnyOtherColumns
, but now you can run update commands to properly convert into the respective REALBirthDate
and Salary
columns of data.
No third-party, completely under your control and data cleansing can be done / validated before it goes into its final destination too.