记得之前面试别人的时候,我问过这样的一个面试题:请写出一条sql语句批量插入100条不重复的数据到sql20008数据库中。也不知道是为啥,好多人就直接写"Insert into tb values(val1,val2,val3,...)",然后再加上一句话:放在循环中。我有点纳闷,呵呵。说真的,如果我一开始没有接触到批量数据操作的时候,我想我也会这么写。其实,这个题目我主要是考察面试人员对"insert into ...select..."语句的熟悉情况,至于能不能写出完整正确的sql语句并不重要,重要的是思路。
那么在实际开发中我们对于批量操作数据的思路又是啥了?
1.循环构建sql语句,批量提交。
2.使用SqlBulkCopy类,批量提交数据(缺点:没有好的方法去重复,变态的方法是插入数据之前删除已经存在的并且需要批量插入的数据,然后再提交)。
3.使用sql2008的表变量结合"insert into ...select..."语句,代码构建临时表,然后提交临时表数据。
接下来会重点介绍第3种方法,数据库环境分别是sql2008,mysql5.5.16(安装在centos5.6下)。
一,C#+Sql2008
1.首先需要在数据库中构建"用户自定义表类型"以及"存储过程",截图如下: