当前位置:  数据库>sqlserver

Sql批量删除与插入数据

    来源: 互联网  发布时间:2014-08-29

    本文导语:  首先,来看下批量删除的操作方法,批量删除很简单,例如:   代码示例: DELETE FROM TestTable WHERE ID IN (1, 3, 54, 68)  --sql2005下运行通过 当用户在界面上不连续的选择多项进行删除时,该语句比循环调用多次删除或多条delete语句...

首先,来看下批量删除的操作方法,批量删除很简单,例如:
 

代码示例:
DELETE FROM TestTable WHERE ID IN (1, 3, 54, 68)  --sql2005下运行通过

当用户在界面上不连续的选择多项进行删除时,该语句比循环调用多次删除或多条delete语句中间加分号一次调用等方法都高效的多。

再来看,批量插入的写法:
sql写法:
 

代码示例:
INSERT INTO TestTable SELECT 1, 'abc' UNION SELECT  2, 'bcd'  UNION SELECT 3, 'cde'  
    --TestTable表没有主键,ID不是主键

oracle写法:
 

代码示例:
INSERT INTO TestTable SELECT 1, 'abc' From daul UNION SELECT  2, 'bcd' From daul   
    --TestTable表没有主键,ID不是主键

测试,这种写法插入1000条数据比循环调用1000次insert或1000条insert语句简单叠加一次调用要高效得多,大概快20多倍(调试状态不是太准)。
其实很简单,就用了个union(union all 也可以),但当时得出测试结果时还是很惊喜的。

另外,union和union all是有区别的,UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。 而UNION ALL只是简单的将两个结果合并后就返回。

这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。

从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL。


使用上述方法进行批量插入,需要两个条件:
1、表不能有主键或者主键是数据库默认的(sql用自动递增列,oracle用序列)
2、组合sql语句时只能直接用字符串连接,不能用参数化sql语句的写法(就是在组合的sql中用@parm做占位符,再给Command对象添加Parameter)

注意,以上两条任意一条不满足,效率的提高都不明显。

由于是考虑到大数据量的批量插入,于是想到了ADO.NET2.0的一个新的特性:SqlBulkCopy,其性能效率非常高。

这里提供一段代码,供大家参考,如下:
 

代码示例:
private static long SqlBulkCopyInsert()
{
//Stopwatch stopwatch = new Stopwatch();
//stopwatch.Start();
//批量插入
DataTable dataTable = CreateDataTable();
string passportKey;
for (int i = 0; i < count; i++)
{
passportKey = Guid.NewGuid().ToString();
DataRow dataRow = dataTable.NewRow();
dataRow[0] = passportKey;
dataTable.Rows.Add(dataRow);
}
// 批量删除
SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(connectionString);
sqlBulkCopy.DestinationTableName = "Passport";
sqlBulkCopy.BatchSize = dataTable.Rows.Count;
//SqlConnection sqlConnection = new SqlConnection(connectionString);
//sqlConnection.Open();
if (dataTable!=null && dataTable.Rows.Count!=0)
{
sqlBulkCopy.WriteToServer(dataTable);
}
sqlBulkCopy.Close();
//sqlConnection.Close();
//stopwatch.Stop();
//return stopwatch.ElapsedMilliseconds;
}

    
 
 

您可能感兴趣的文章:

  • 循环里面执行sql插入语句只执行第一个插入,为什么??
  • 中文插入SQL数据库中变成了乱码?
  • 急问题:在java中嵌入sql的插入语句,插入成功,但是出现异常
  • 用什么格式插入SQL SERVER的datetime数据
  • jsp中插入有主关键字的数据库的sql语句如何写???
  • 完美解决SQL server2005中插入汉字变成问号的问题
  • sql 插入单引号、添加、删除字段的例子
  • 写sql进数据库(DB2)怎样实现自动插入(表的主键为String)
  • sql 语句插入结果为select和值混合示例
  • 探讨:sql插入空,默认1900-01-01 00:00:00.000的解决方法详解
  • SQL 分布式查询、插入递增列示例
  • SQL Server手工插入标识列的方法
  • sql server 2008 将某表中数据随机插入另一个表的方法
  • php CI框架插入一条或多条sql记录示例
  • 用SQL批量插入数据的代码
  • sql 插入单引号、添加、删除字段的例子 iis7站长之家
  • 在SQL Server数据库中为标识(IDENTITY)列插入显式值
  • sql server 触发器实例(判断是插入、删除,还是修改)
  • 有关java.sql.ResultSet 利用SetDate往 oracle 中插入时间和日期的问题!!
  • SQL学习笔记二 创建表、插入数据的语句
  • sql server 删除表1某些数据的同时自动删除表2的相关数据的sql代码
  • 安装SQL2008时提示删除SQL2005Express工具的解决方法
  • sql server 2005删除用户时“数据库主体在该数据库中拥有架构,无法删除”错误的解决办法
  • SQLServer用t-sql命令批量删除数据库中指定表(游标循环删除)
  • sql语言中delete删除命令语句详解
  • 重装MS SQL Server 2000前必须彻底删除原安装文件的方法
  • Sql Server 2000删除数据库备份文件
  • sql 存储过程批量删除数据的语句
  • Sql Server 删除主键与重建主键的例子
  • jsp+SQL删除记录出错,请指教!
  • SQL Server 不删除信息重新恢复自动编号列的序号的方法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • SQL Server 2008如何进行数据库分离和附加详细介绍
  • 取数据库前几条数据(sql server、oracle、mysql)的sql写法
  • 查询SQL Server中所有数据库的数据文件位置的sql脚本
  • SQL Server数据库的修复SQL语句
  • 使用php语句将数据库*.sql文件导入数据库
  • 如何实现连接一次数据库,提交多个sql语句。(sql的批处理)
  • sql2005 大数据量检索分页的sql代码
  • t-sql/mssql用命令行导入数据脚本的SQL语句示例
  • 请问Linux数据库编程是否也可以支持通用的SQL语言进行数据库编写.
  • jsp jdbc为什麽不能把数据insert到sql server 中,也不能从sql server中提取数据?!
  • sql数据库如何查询修改数据库恢复模式?
  • sql添加数据后返回受影响行数据
  • sql语句获取数据库服务器上所有数据库的名字
  • sql 语句 取数据库服务器上所有数据库的名字
  • Access 数据类型与 MS SQL 数据类型的相应
  • linux下能调用*.sql备份的数据库数据么?
  • sql数据库多用户模式修改方法
  • sql数据库修改数据库用户
  • 数据库前端 SQL Workbench-J
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 在Java中以MS SQL2000为后端数据库?
  • java命名空间java.sql接口statement的类成员方法: executeupdate定义及介绍
  • 请问,这是什么错误!java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][Named Pipes]??????? SQL Server?虽然分少,但一定给,只要您是前5名回复者中最好的以为!
  • java命名空间java.sql接口connection的类成员方法: nativesql定义及介绍
  • SQL查询分析工具 SQL Workbench/J
  • java命名空间java.sql接口preparedstatement的类成员方法: executeupdate定义及介绍
  • oracle导出sql语句的结果集和保存执行的sql语句(深入分析)
  • java命名空间java.sql接口rowid的类成员方法: getbytes定义及介绍
  • SQL Server统计SQL语句执行时间的脚本
  • java命名空间java.sql接口ref的类成员方法: getbasetypename定义及介绍
  • SQL客户端软件 PKLite SQL Client


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3