I am trying to implement bulk insert of data from Datatable. In my MS-SQL Table(Destination table) i have a column with primary key not Identity column, so i have to increment manually. But its not possible in Code because there will be multi Thread on the same table.Please give me suggestion if any.
public void BulkInsert(DataTable dtTable)
    {
        DataTable dtProductSold = dtTable;
        //creating object of SqlBulkCopy  
        SqlBulkCopy objbulk = new SqlBulkCopy(ConStr.ToString()); 
        //assigning Destination table name  
        objbulk.DestinationTableName = "BatchData_InvReportMapping";  
        //Mapping Table column  
        objbulk.ColumnMappings.Add("InvPK", "InvPK"); 
        objbulk.ColumnMappings.Add("DateValue", "DateDalue");
        objbulk.ColumnMappings.Add("TextValue", "TextValue");
        objbulk.ColumnMappings.Add("NumericValue", "NumericValue"); 
        objbulk.ColumnMappings.Add("ErrorValue", "ErrorValue"); 
        //inserting bulk Records into DataBase   
        objbulk.WriteToServer(dtProductSold);  
    }
Thanks in advance,
                        
This is too long for a comment.
If you have a primary key column, then you need to take responsibility for its being unique and non-NULL when you insert rows. SQL Server offers a very handy mechanism to help with this, which is the
identitycolumn.If you do not have an identity, then I you basically have two options:
Oh, wait. The default option for
bulk insertis not to fire triggers, so the second choice really isn't a good option.Instead, modify the table to have an identity primary key column. Then define a view on the table without the primary key and do the bulk insert into the view. The primary key will then be assigned automatically.
EDIT:
There is a third option, which might be feasible. Load the data into a staging table. Then insert from the staging table into the final table, calculating the primary key value. Something like this: