sql如何遍历几百万的表_SQL Server遍历表中记录的2种方法(使用表变量和游标)
SQL Server遍历表一般都要用到游标,SQL Server中可以很容易的用游标实现循环,实现SQL Server遍历表中记录。本文将介绍利用使用表变量和游标实现数据库中表的遍历。
表变量来实现表的遍历
以下代码中,代码块之间的差异已经用灰色的背景标记。
DECLARE @temp TABLE
(
[id] INT IDENTITY(1, 1) ,
[Name] VARCHAR(10)
)
DECLARE @tempId INT ,
@tempName VARCHAR(10)
INSERT INTO @temp
VALUES ( 'a' )
INSERT INTO @temp
VALUES ( 'b' )
INSERT INTO @temp
VALUES ( 'c' )
INSERT INTO @temp
VALUES ( 'd' )
INSERT INTO @temp
VALUES ( 'e' )
WHILE EXISTS ( SELECT [id]
FROM @temp )
BEGIN
SET ROWCOUNT 1
SELECT @tempId = [id] ,
@tempName = [Name]
FROM @temp
SET ROWCOUNT 0
--delete from @temp where [id] = @tempId
PRINT 'Name:----' + @tempName
END
但是这种方法,必须借助ROWCOUNT。但是使用 SET ROWCOUNT 将可能会影响 DELETE、INSERT 和 UPDATE 语句。
所以修改上面WHILE循环,改用TOP来选出首条记录。
WHILE EXISTS ( SELECT [id]
FROM @temp )
BEGIN
SELECT TOP 1
@tempId = [id] ,
@tempName = [Name]
FROM @temp
DELETE FROM @temp
WHERE [id] = @tempId
SELECT *
FROM @temp
EXEC('drop table '+)
PRINT 'Name:----' + @tempName
END
这种方法也存在一个问题,需要将遍历过的行删除,事实上,我们在实际应用中可能并不想要遍历完一行就删除一行。
利用游标来遍历表
游标是非常邪恶的一种存在,使用游标经常会比使用面向集合的方法慢2-3倍,当游标定义在大数据量时,这个比例还会增加。如果可能,尽量使用while,子查询,临时表,函数,表变量等来替代游标,记住,游标永远只是你最后无奈之下的选择,而不是首选。
--定义表变量
DECLARE @temp TABLE
(
[id] INT IDENTITY(1, 1) ,
[Name] VARCHAR(10)
)
DECLARE @tempId INT ,
@tempName VARCHAR(10)
DECLARE test_Cursor CURSOR LOCAL FOR
SELECT [id],[name] FROM @temp
--插入数据值
INSERT INTO @temp
VALUES ( 'a' )
INSERT INTO @temp
VALUES ( 'b' )
INSERT INTO @temp
VALUES ( 'c' )
INSERT INTO @temp
VALUES ( 'd' )
INSERT INTO @temp
VALUES ( 'e' )
--打开游标
OPEN test_Cursor
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM test_Cursor INTO @tempId,@tempname
PRINT 'Name:----' + @tempName
END
CLOSE test_Cursor
DEALLOCATE test_Cursor
sql如何遍历几百万的表_SQL Server遍历表中记录的2种方法(使用表变量和游标)相关推荐
- SQL Server遍历表中记录的2种方法
SQL Server遍历表一般都要用到游标,SQL Server中可以很容易的用游标实现循环,实现SQL Server遍历表中记录.本文将介绍利用使用表变量和游标实现数据库中表的遍历. 表变量来实现表 ...
- sql如何遍历几百万的表_SQL Server中遍历表中记录的方法
遍历表有下面几种方法 1.使用游标 2.使用表变量 3.使用临时表 下面通过一个实例分别介绍三中方法的实现: 1.需求 给HR.Employees表,fullname 列赋值,其值为 firstnam ...
- sql如何遍历几百万的表_SQl SERVER 2000 遍历表中数据的方法
方法一:使用游标 declare @ProductName nvarchar(50) declare pcurr cursor for select ProductName from Products ...
- SQL Server中遍历表中记录的方法
遍历表有下面几种方法 1.使用游标 2.使用表变量 3.使用临时表 下面通过一个实例分别介绍三中方法的实现: 1.需求 给HR.Employees表,fullname 列赋值,其值为 firstnam ...
- sql如何遍历几百万的表_关于SQL查询效率,100w数据,查询只要1秒
1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况 p4: 2.4 内存: 1 G os: windows 2003 数据库: ms sql server 2000 目的: 查询 ...
- sql如何遍历几百万的表_Oracle PL/SQL调优技巧分享
原创作者:如人饮水冷暖自知 责任编辑:AcDante 前言 开门见山,今天和大家聊聊如何对PL/SQL代码进行优化,以及如何编写高效的PL/SQL代码,如果您是开发DBA,或者您是数据库开 发人员,对 ...
- SQL Server 数据库查找重复记录的几种方法
http://www.hanyu123.cn/html/c61/6790.html 一.查某一列(或多列)的重复值.(只可以查出重复记录的值,不能查出整个记录的信息) 例如:查找stuid,stuna ...
- SQL语句遍历树结构的数据表
[转自]:肆尾葱的博客<SQL语句遍历树结构的数据表> 一.创建树结构的数据库表 -- 数据库为 SQL Server create table treeTest(id int,paren ...
- sql server新增列_SQL Server 2016安装中的新增功能?
sql server新增列 SQL Server 2016 introduced officially on the 1st of June 2016. It comes with many new ...
最新文章
- python读取、写入、移动、复制文件(夹)以及其他关于文件(夹)的操作
- visual C++学习杂谈1(extern、cosnt引用指针)
- animation动画不生效_SwiftUI动画(1)之Animatable
- java 线程接口_java - 实现线程的接口
- 发现一个增长天翼手机待机时间的方法
- php mysql redis mq_docker 搭建 php-mysql-nginx-redis-rabbitmq环境
- LoadRunner常用函数(转)
- 打印出不同顺序的字符串单引号和双引号的差异
- mysql state_MySQL进程常见的State【转】
- codeforces 796A-D
- paip.python 调用qt ui 总结
- 计算机wps云文档功能不见,WPS2019文档丢失怎么办 WPS2019云文档在哪
- python手机版做小游戏代码大全-12岁的少年教你用Python做小游戏
- windows 安装apex_《Apex英雄》:如何在你的PC上下载安装玩到它
- 苹果手机怎么查看已连接的wifi密码_WIFI密码忘了?教你查看手机已连接WIFI的密码...
- mysql 拼音查询_MySQL拼音首字母查询
- 王道数据结构3.2.5——1、循环队列中设置tag区分头指针front和队尾指针rear相等时队列的状态是空还是满
- 学习笔记——共阳数码管的动态显示
- python学习笔记1-环境安装
- RHEL5 Oracle 11G R2 RAC 静默安装 (三) rdbms安装 dbca 建库