I would suggest you to go by the batch insert way of storing data in SQL. I assume that you are having a front application that is interacting with the user and sending the data to the database for storing.
In the previous answer's one suggested you to go for the batch mode of data insertion and the other suggested to use secondary table for data cleaning or structuring. I would suggest you to structure the data and then send it to database for storing. ie do the cleaning and data structuring part in your server side language and use the database for data insertion and retrieval only. More over considering having 3000 rows to insert I would have defined a for loop to loop in data. then I would have first processed 500 rows, structured and cleaned them and then put them into batch insert.
In the same iteration I would have processed next 500 rows and created another batch for insert. So basically while my previous 500 rows are being inserted in database I would have been working to insert next 500 rows. Of course these is a brief overview and requires proper work around on it to be implemented.
I see that these thread pretty old so I am little late for the party. never the less just wanted to share my opinion. Do reply with how did you solve the issue. Will be useful for us in future.