I'm working on a data conversion project where I'm taking 80k+ rows and moving them from one table to another. When I run my T-SQL statement, it fails with various errors having to do with converting types or whatever. Is there a way to find out which row caused the error?
I'm performing an INSERT INTO TABLE1 (...) SELECT ... FROM TABLE2
statement.
Table2 is just a bunch of varchar fields where TABLE1 has the right types.
This script will be put into a stored procedure and executed from an SSIS package. The SSIS package first imports 5 large flat files into TABLE2.
Here is a sample error message:
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
There are many date fields. In TABLE2, there are data values like 02/05/1975
for birth date. I want to examine each row that is causing the error, so I can report to the department responsible for the bad data so they can correct it.
What I do is split the rowset in half with a WHERE clause:
INSERT MyTable(id, datecol) SELECT id, datecol FROM OtherTable WHERE ID BETWEEN 0 AND 40,000
and then keep changing the values on the between part of the where clause. I've done this by hand many times, but it occurs to me that you could automate the splitting with a little .Net code in a loop, trapping exceptions and then narrowing it down to just the row throwing the exception, little by little.