需要大量数据保存至Sql Server,有二种方法,
一是从前台在相应的Table中,将数据复制粘贴进去,再保存,此方法类似Excel,用户比较容易接受。但数据量较大时(如3万行),效率太低,与Excel相差较大。
二是用Sql BulkCopy方法,编写代码,导入至数据库,此方法效率很高,局域网内部几乎可以达到1w 条/秒。此方法的劣势是需要编写代码,要求源数据的格式(特别是表头)要一致。
由于第一个方法有易用性的特点,最近想改造一下保存的代码,对新增的数据用合成Insert语句的方法进行处理,理论上可以提高前台的保存效率。
Insert into tblName (Fields list)
Values
(1st vals list)
, (2nd vals list)
, (3rd vals list)
, ....
, (n vals list)
上述格式语句,Sql Server支持一次性插入 n<= 1000条记录,如果记录是几万条,也需分批处理。
但刚才按此思路写代码时,发现大批量粘贴数据再保存的主要效率损失可能不在保存的过程,而是在粘贴的过程。似乎Table每个单元格在接收到数据时,都会做数据验证(数据类型,对字符串型还验证长度),3w条数据(25列)从Ctrl + V开始到数据在前台完全显示出来要4分钟,而保存差不多3分钟左右。
请问,有没有方法在复制粘贴即按下CTRL + V的时候,让Table不验证数据,类似于Excel一样,直接粘贴?如果无法做到,那用合成Insert 语句的代来改善保存速度就意义不大了。
请赐教!