Sql批量插入和批量删除

Sql批量插入和批量删除的用法是每个使用数据库的人基本都要掌握的,在这里主要介绍下Sql批量插入的用法,让我们先看下批量删除一般如何来做,供您参考,希望能对您有所帮助。
1.批量删除很简单

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

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

2.批量插入的写法:

[[15136]]
代码

 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。

但是要使用上述方法来进行批量插入的话,需要两个条件:#p#

1、表不能有主键或者主键是数据库默认的(sql用自动递增列,oracle用序列)

2、组合sql语句时只能直接用字符串连接,不能用参数化sql语句的写法(就是在组合的sql中用@parm做占位符,再给Command对象添加Parameter)

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

由于是考虑到大数据量的批量插入,于是我想到了ADO.NET2.0的一个新的特性:SqlBulkCopy。有关这个的性能,很早之前我是亲自做过性能测试的,效率非常高。

 [[15137]]代码

privatestaticlong 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;
}

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/303419.html<

(0)
管理的头像管理
上一篇2025-05-25 06:13
下一篇 2025-05-25 06:14

相关推荐

  • 骨干网络体系结构能干什么?骨干网络体系结构的作用

    骨干网络体系结构是现代信息社会的“超级高速公路网”,它通过分层设计、冗余备份和智能调度,确保海量数据在全球范围内高速、稳定、安全地传输,是支撑云计算、物联网及人工智能应用的底层基石,想象一下,如果你把互联网比作一个巨大的城市交通系统,那么骨干网络就是连接各个城市的主干道和立交桥,没有它,你的每一次微信发送、每一……

    2026-06-18
    0
  • 高io数据库可以干什么用?高io数据库适合什么场景

    高IO数据库的核心价值在于通过极高的读写吞吐量,解决海量数据场景下的性能瓶颈,是支撑高并发交易、实时分析及大规模内容分发的关键基础设施,在数字化转型的深水区,数据不再仅仅是静态的记录,而是流动的资产,传统的机械硬盘或普通SSD早已无法满足现代应用对速度的极致追求,高IO(Input/Output)数据库,就是那……

    2026-06-18
    0
  • 高io服务器性能如何?高io服务器适合什么场景

    高IO服务器并非单纯指代某种硬件,而是指在随机读写、高并发连接及小文件处理场景下,具备极致IOPS(每秒输入输出操作次数)和低延迟特性的计算资源,它是支撑现代高并发应用稳定运行的核心基石,在2026年的数字化浪潮中,业务负载早已从简单的静态页面展示演变为复杂的实时数据处理,许多开发者在排查系统瓶颈时,往往忽略了……

    2026-06-18
    0
  • 隔离网络空间哪里便宜?国内隔离网络空间价格

    隔离网络空间并没有统一的“便宜”标准,其成本高度取决于物理隔离等级、带宽需求及安全合规要求,通常物理网闸方案初期投入较高但长期运维成本低,而逻辑隔离方案虽初期便宜但存在潜在安全风险,建议根据业务敏感度选择混合隔离架构以平衡成本与安全,在数字化时代,企业构建独立网络环境的需求日益增长,但“隔离网络空间哪里便宜”这……

    2026-06-18
    0
  • 骨干网络体系结构设备为何故障?常见原因有哪些

    骨干网络体系结构设备故障的核心原因通常归结为硬件老化、配置错误、物理链路中断及外部攻击四大类,其中电源模块失效与光模块性能衰减是占比最高的隐性故障源,骨干网作为数字经济的“大动脉”,其稳定性直接关乎国计民生,当核心路由器或交换机出现丢包、震荡甚至宕机时,运维人员往往面临巨大的压力,很多人第一反应是检查软件配置……

    2026-06-18
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注