SqlBulkCopy Insertion avec colonne d'identité

c# identity-insert sqlbulkcopy sql-server

Question

J'utilise l'objet SqlBulkCopy pour insérer quelques millions de lignes générées dans une base de données. Le seul problème est que la table dans laquelle j'insère a une colonne d'identité. J'ai essayé de définir SqlBulkCopyOptions sur SqlBulkCopyOptions.KeepIdentity et de définir la colonne d'identité sur 0 , DbNull.Value et null . Aucun d'entre eux ont fonctionné. J'ai l'impression de rater quelque chose d'assez simple, si quelqu'un pouvait m'éclairer, ce serait fantastique. Merci!

edit Pour clarifier, je n'ai pas les valeurs d'identité définies dans le DataTable je suis en train d'importer. Je veux qu'ils soient générés dans le cadre de l'importation.

edit 2 Voici le code que j'utilise pour créer l'objet de 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);
}

Réponse acceptée

Pour que la table de destination attribue l'identité, n'utilisez pas l'option SqlBulkCopyOptions.KeepIdentity . Au lieu de cela, ne SqlBulkCopy pas l'identité de la source et ne l'extrayez pas de la source pour l'envoyer à SqlBulkCopy .


Réponse populaire

Remplissez le ColumnMapping de l'objet BulkCopy sans mapper la colonne d'identité. La colonne d'identité sera générée par la base de données cible.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi