【T-SQL】插入与删除大量数据
2013-07-20 11:20
295 查看
由于工作的原因,现在一直在使用SQL SERVER编程,用了几个月之后发现自己技术储备真是匮乏的很。分页查询、索引什么的都不会,最后,羞耻心与上进心使我决定好好学一下T-SQL这门数据库语言。
干学语法太枯燥了,我决定学习各种问题的SQL SERVER版解决方案。希望看过的各位不吝赐教,也希望能为T-SQL语法初学者提供一点帮助。
插 入 大 量 数 据
第一个案例就是插入删除大量数据,因为后面很多的例子都要以这个为基础
插入大量数据的方式有两种:循环插入和批量插入
循环插入是初学者最先学会的大批量插入数据的方法,但是由于每次insert都要产生日志,所以该方法很慢
批量插入我首选CTE批量插入,该方法很快
删 除 大 量 数 据
删除大量数据的方法有:delete循环删除、批量删除、truncate释放表资源
这三种方法的删除速度是truncate > 批量删除 > delete循环删除
truncate的删除速度简直是秒杀,但是他不能限制删除的范围,我将其理解为是在释放表的资源,所以不能加where限制,不知道对不对!
好了,关于插入、删除大量数据的方法我就学了这么多。
干学语法太枯燥了,我决定学习各种问题的SQL SERVER版解决方案。希望看过的各位不吝赐教,也希望能为T-SQL语法初学者提供一点帮助。
插 入 大 量 数 据
第一个案例就是插入删除大量数据,因为后面很多的例子都要以这个为基础
--创建表Users create table Users ( userID bigint identity primary key , userName nvarchar(20) , sex varchar(6) , age int )
插入大量数据的方式有两种:循环插入和批量插入
循环插入是初学者最先学会的大批量插入数据的方法,但是由于每次insert都要产生日志,所以该方法很慢
--循环插入 declare @count int , @index int set @count = 1000000 set @index = 1 while (@index < @count) Begin insert into Users(userName, sex, age) select case when @index % 2 = 0 then N'张三' + CAST(@index as nvarchar(10)) when @index % 3 = 0 and @index not like '%6%' and @index not like '%9%' then N'王霞' + CAST(@index as nvarchar(10)) when @index % 5 = 0 then N'李四' + CAST(@index as varchar(10)) when @index % 7 = 0 then N'赵五' + CAST(@index as varchar(10)) else N'周六' + CAST(@index as nvarchar(10)) end , case when @index % 3 = 0 and @index Not like '%6%' and @index not like '%9%' then 'Female' else 'Male' end , ROUND(RAND() * 28, 0) set @index = @index + 1; End
批量插入我首选CTE批量插入,该方法很快
--CTE递归循环插入,是面向对象的,基于CLR,插入速度最快 Begin Transaction; with numList(num) as ( select 1 union all select num + 1 from numList where num < 1000000 ) insert into Users(userName, sex, age) select case when num % 2 = 0 then N'张三' + CAST(num as nvarchar(10)) when num % 3 = 0 and num not like '%6%' and num not like '%9%' then N'王霞' + CAST(num as nvarchar(10)) when num % 5 = 0 then N'李四' + CAST(num as varchar(10)) when num % 7 = 0 then N'赵五' + CAST(num as varchar(10)) else N'周六' + CAST(num as nvarchar(10)) end , case when num % 3 = 0 and num Not like '%6%' and num not like '%9%' then 'Female' else 'Male' end , ROUND(CEILING(RAND(CHECKSUM(NEWID()))*28), 0) from numList option (maxrecursion 0) if(@@ERROR <> 0) Rollback Transaction else Commit Transaction
删 除 大 量 数 据
删除大量数据的方法有:delete循环删除、批量删除、truncate释放表资源
1 --循环删除,delete不仅会产生日志,而且还会锁记录 2 delete from Users 3 where userID > 50000 4 5 --批量删除 6 set rowcount 1000000; 7 while 1 = 1 8 Begin 9 Begin Transaction 10 delete from Users where userID > 50000 11 commit 12 if @@ROWCOUNT = 0 13 break; 14 End 15 16 --TRUNCATE删除,因为truncate属于DDL语句,所以只产生少量日志,删除速度快 17 truncate table Users
这三种方法的删除速度是truncate > 批量删除 > delete循环删除
truncate的删除速度简直是秒杀,但是他不能限制删除的范围,我将其理解为是在释放表的资源,所以不能加where限制,不知道对不对!
好了,关于插入、删除大量数据的方法我就学了这么多。
相关文章推荐
- SQL向一个表中批量插入&&删除大量数据
- LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据
- SQL一次性插入大量数据
- 使用SQL语句对表进行插入、修改和删除数据操作
- MySQL基本SQL语句之数据插入、删除数据和更新数据
- SQL-数据的插入、更新和删除 (转载)
- sql如何向一个表中批量插入大量数据
- android中常用的查询、插入、更新、删除等SQL语句以及SQLite数据类型
- 【批量生成10万条sql数据库数据+IO流的使用】生成简单sql插入语句大量数据,以及输出流生成文件2017年
- 在ASP.NET 2.0中操作数据之四十七:用SqlDataSource控件插入、更新、删除数据
- sql生成(插入、修改、删除数据的存储过程)代码的存储过程
- 一条SQL语句插入大量数据 和查看某个表的字段是否有重复值
- LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据
- Sql Server数据库之通过SqlBulkCopy快速插入大量数据
- LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据
- SQL语句,数据更新,数据插入删除修改和对视图的更新操作
- Mysql中Innodb大量插入数据时SQL语句的优化
- EF结合SqlBulkCopy实现高效的批量数据插入 |EF插件EntityFramework.Extended实现批量更新和删除
- Scott Mitchell 的ASP.NET 2.0数据教程之49:用SqlDataSource控件插入、更新、删除数据
- 使用T-SQL语句插入、更新、删除数据表