Inserimento SqlBulkCopy con colonna Identity

c# identity-insert sqlbulkcopy sql-server

Domanda

Sto usando l'oggetto SqlBulkCopy per inserire un paio di milioni di righe generate in un database. L'unico problema è che la tabella che sto inserendo ha una colonna Identity. Ho provato a impostare SqlBulkCopyOptions su SqlBulkCopyOptions.KeepIdentity e impostare la colonna Identity su 0 , DbNull.Value e null . Nessuno dei quali ha funzionato. Mi sento come se mi mancasse qualcosa di abbastanza semplice, se qualcuno potesse illuminarmi sarebbe fantastico. Grazie!

modifica Per chiarire, non ho i valori di identità impostati nel DataTable che sto importando. Voglio che vengano generati come parte dell'importazione.

modifica 2 Ecco il codice che uso per creare l'oggetto base SqlBulkCopy .

SqlBulkCopy sbc = GetBulkCopy(SqlBulkCopyOptions.KeepIdentity);
sbc.DestinationTableName = LOOKUP_TABLE;

private static SqlBulkCopy GetBulkCopy(SqlBulkCopyOptions options = 
    SqlBulkCopyOptions.Default) 
{
    Configuration cfg = WebConfigurationManager.OpenWebConfiguration("/RSWifi");
    string connString =
    cfg.ConnectionStrings.ConnectionStrings["WifiData"].ConnectionString;
    return new SqlBulkCopy(connString, options);
}

Risposta accettata

Per fare in modo che la tabella di destinazione assegni l'identità, non utilizzare l'opzione SqlBulkCopyOptions.KeepIdentity . Invece, non mappare l'identità dalla fonte e non estrarla dall'origine per inviare tramite SqlBulkCopy .


Risposta popolare

Riempi il ColumnMapping dell'oggetto BulkCopy e non mappare la colonna Identity. La colonna Identity verrà generata dal database di destinazione.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow