SqlBulkCopyIgnoresDuplicateRecordsinDatabaseinDatabase我可以从我传递给SqlBulkCopy的数据表中忽略sql数据库中已经存在的数据的重复记录。如果是,那么如何,如果不是,其他选项也可以解释我。正如前面的海报所说,这不是内置的。我已经使用以下方法实现了类似的东西:SQL存储过程,它接受具有所需数据的TableValuedParameter。在存储过程中,我然后将所有记录插入到临时表中。一旦你有了它,你就可以在存储过程中使用SQLsMERGE语句来插入尚不存在的数据。因此,假设我们的数据只是将人名存储在表Person中。我们只有一个ID和一个名字。我还假设该表称为“人”。下面是我如何创建表值参数类型(在SQLServer中创建)CREATETYPEudt_personASTABLE([id][INT]NOTNULL,[name][nvarchar(50)]NULL)GO我现在创建存储过程:CREATEPROCEDURESaveNewPeople@pPeopleudt_PersonASBEGIN--创建临时表CREATETABLE#tmpPeople(idINT,nameVARCHAR50)--我们将暂存所有传入临时表的数据INSERTINTO#tmpPeopleSELECTid,nameFROM@pPeople--注意:你需要在这里考虑一下锁定策略MERGEpeopleASpUSING#tmpPeopleAStONp.id=t.idWHENNOTMATCHEDBYTARGETTHEN--我们想插入新的人INSERT(id,name)VALUES(t.id,t.name)WHENMATCHEDTHEN——你可能不需要这个,假设更新名称,例如UPDATESETp.name=t.nameEND现在我们已经安装了SQL。让我们在C#中创建大量数据:DataTableppl=newDataTable();ppl.Columns.Add("id",typeof(int));ppl.Columns.Add("名称",typeof(string));//表已创建,让我们添加一些人varbob=ppl.NewRow();鲍勃[“身份证”]=1;鲍勃[“名字”]=“鲍勃”;ppl.Rows.Add(bob);varjim=ppl.NewRow();吉姆[“身份证”]=2;吉姆[“名字”]=“吉姆”;ppl.Rows.Add(吉姆);//现在人数已经够多了,让我们调用存储过程;vartvp=newSqlParameter{ParameterName="@pPeople",SqlDbType=SqlDbType.Structured,Value=ppl,TypeName="udt_person"}cmd.Parameters.Add(tvp);conn.Open();cmd.ExecuteNonQuery();希望这能给你一个想法。如果您随后修改了C#数据表,您应该会看到插入、更新或忽略的行。祝你好运。不,这不是内置的。您需要先清理客户端上的数据或插入到临时表中。以上就是C#学习教程:SqlBulkCopy忽略数据库中的重复记录,共享所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处:
