Inserción SqlBulkCopy con columna de identidad

c# identity-insert sqlbulkcopy sql-server

Pregunta

Estoy utilizando el objeto SqlBulkCopy para insertar un par de millones de filas generadas en una base de datos. El único problema es que la tabla en la que estoy insertando tiene una columna de identidad. He intentado configurar SqlBulkCopyOptions en SqlBulkCopyOptions.KeepIdentity y establecer la columna de identidad en 0 's, DbNull.Value y null . Ninguno de los cuales ha funcionado. Siento que me estoy perdiendo algo muy simple, si alguien me pudiera iluminar sería fantástico. ¡Gracias!

editar Para aclarar, no tengo los valores de identidad establecidos en el DataTable que estoy importando. Quiero que se generen como parte de la importación.

edit 2 Este es el código que utilizo para crear el objeto SqlBulkCopy base.

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);
}

Respuesta aceptada

Para que la tabla de destino asigne la identidad, no use la opción SqlBulkCopyOptions.KeepIdentity . En su lugar, no asigne la identidad de la fuente y no la extraiga de la fuente para enviarla a SqlBulkCopy .


Respuesta popular

Llene el ColumnMapping del BulkCopy objeto y no asigne la columna de identidad. La columna de identidad será generada por la base de datos de destino.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow