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种方法(使用表变量和游标)相关推荐

  1. SQL Server遍历表中记录的2种方法

    SQL Server遍历表一般都要用到游标,SQL Server中可以很容易的用游标实现循环,实现SQL Server遍历表中记录.本文将介绍利用使用表变量和游标实现数据库中表的遍历. 表变量来实现表 ...

  2. sql如何遍历几百万的表_SQL Server中遍历表中记录的方法

    遍历表有下面几种方法 1.使用游标 2.使用表变量 3.使用临时表 下面通过一个实例分别介绍三中方法的实现: 1.需求 给HR.Employees表,fullname 列赋值,其值为 firstnam ...

  3. sql如何遍历几百万的表_SQl SERVER 2000 遍历表中数据的方法

    方法一:使用游标 declare @ProductName nvarchar(50) declare pcurr cursor for select ProductName from Products ...

  4. SQL Server中遍历表中记录的方法

    遍历表有下面几种方法 1.使用游标 2.使用表变量 3.使用临时表 下面通过一个实例分别介绍三中方法的实现: 1.需求 给HR.Employees表,fullname 列赋值,其值为 firstnam ...

  5. sql如何遍历几百万的表_关于SQL查询效率,100w数据,查询只要1秒

    1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况 p4: 2.4 内存: 1 G os: windows 2003 数据库: ms sql server 2000 目的: 查询 ...

  6. sql如何遍历几百万的表_Oracle PL/SQL调优技巧分享

    原创作者:如人饮水冷暖自知 责任编辑:AcDante 前言 开门见山,今天和大家聊聊如何对PL/SQL代码进行优化,以及如何编写高效的PL/SQL代码,如果您是开发DBA,或者您是数据库开 发人员,对 ...

  7. SQL Server 数据库查找重复记录的几种方法

    http://www.hanyu123.cn/html/c61/6790.html 一.查某一列(或多列)的重复值.(只可以查出重复记录的值,不能查出整个记录的信息) 例如:查找stuid,stuna ...

  8. SQL语句遍历树结构的数据表

    [转自]:肆尾葱的博客<SQL语句遍历树结构的数据表> 一.创建树结构的数据库表 -- 数据库为 SQL Server create table treeTest(id int,paren ...

  9. sql server新增列_SQL Server 2016安装中的新增功能?

    sql server新增列 SQL Server 2016 introduced officially on the 1st of June 2016. It comes with many new ...

最新文章

  1. python读取、写入、移动、复制文件(夹)以及其他关于文件(夹)的操作
  2. visual C++学习杂谈1(extern、cosnt引用指针)
  3. animation动画不生效_SwiftUI动画(1)之Animatable
  4. java 线程接口_java - 实现线程的接口
  5. 发现一个增长天翼手机待机时间的方法
  6. php mysql redis mq_docker 搭建 php-mysql-nginx-redis-rabbitmq环境
  7. LoadRunner常用函数(转)
  8. 打印出不同顺序的字符串单引号和双引号的差异
  9. mysql state_MySQL进程常见的State【转】
  10. codeforces 796A-D
  11. paip.python 调用qt ui 总结
  12. 计算机wps云文档功能不见,WPS2019文档丢失怎么办 WPS2019云文档在哪
  13. python手机版做小游戏代码大全-12岁的少年教你用Python做小游戏
  14. windows 安装apex_《Apex英雄》:如何在你的PC上下载安装玩到它
  15. 苹果手机怎么查看已连接的wifi密码_WIFI密码忘了?教你查看手机已连接WIFI的密码...
  16. mysql 拼音查询_MySQL拼音首字母查询
  17. 王道数据结构3.2.5——1、循环队列中设置tag区分头指针front和队尾指针rear相等时队列的状态是空还是满
  18. 学习笔记——共阳数码管的动态显示
  19. python学习笔记1-环境安装
  20. RHEL5 Oracle 11G R2 RAC 静默安装 (三) rdbms安装 dbca 建库

热门文章

  1. 算法之递推及其应用(递推关系的建立及在信息学竞赛中的应用 安徽 高寒蕊)...
  2. 安装SQL SERVER 2008时出现了SQL SERVER 2005 Express Tool Installed 的错误
  3. Unix操作系统目录存放内容
  4. C# MVC的博客开发(三)注册
  5. 2018java基础面试题(我自己用的,面试好多家公司基本会问到的问题和技术)
  6. 我们为何需要单点登录系统
  7. 如何找到哪些数据库中哪些用户有DBA权限
  8. Oracle rman备份和还原恢复数据库
  9. 支付宝后台如何查看自己的签约详情
  10. MSSQL优化之————探索MSSQL执行计划