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

表变量来实现表的遍历

以下代码中,代码块之间的差异已经用灰色的背景标记。

 1 DECLARE @temp TABLE
2
3 (
4
5 [id] INT IDENTITY(1, 1) ,
6
7 [Name] VARCHAR(10)
8
9 )
10
11 DECLARE @tempId INT ,
12
13 @tempName VARCHAR(10)
14
15 INSERT INTO @temp
16
17 VALUES ( 'a' )
18
19 INSERT INTO @temp
20
21 VALUES ( 'b' )
22
23 INSERT INTO @temp
24
25 VALUES ( 'c' )
26
27 INSERT INTO @temp
28
29 VALUES ( 'd' )
30
31 INSERT INTO @temp
32
33 VALUES ( 'e' )
34
35 WHILE EXISTS ( SELECT [id]
36
37 FROM @temp )
38
39 BEGIN
40
41 SET ROWCOUNT 1
42
43 SELECT @tempId = [id] ,
44
45 @tempName = [Name]
46
47 FROM @temp
48
49 SET ROWCOUNT 0
50
51 --delete from @temp where [id] = @tempId
52
53 PRINT 'Name:----' + @tempName
54
55 END

但是这种方法,必须借助ROWCOUNT。但是使用SET ROWCOUNT将可能会影响 DELETE、INSERT 和 UPDATE 语句。

所以修改上面WHILE循环,改用TOP来选出首条记录。

 1 WHILE EXISTS ( SELECT   [id]
2
3 FROM @temp )
4
5 BEGIN
6
7 SELECT TOP 1
8
9 @tempId = [id] ,
10
11 @tempName = [Name]
12
13 FROM @temp
14
15 DELETE FROM @temp
16
17 WHERE [id] = @tempId
18
19 SELECT *
20
21 FROM @temp
22
23
24
25 EXEC('drop table '+)
26
27 PRINT 'Name:----' + @tempName
28
29 END

这种方法也存在一个问题,需要将遍历过的行删除,事实上,我们在实际应用中可能并不想要遍历完一行就删除一行。

利用游标来遍历表

  游标是非常邪恶的一种存在,使用游标经常会比使用面向集合的方法慢2-3倍,当游标定义在大数据量时,这个比例还会增加。如果可能,尽量使用while,子查询,临时表,函数,表变量等来替代游标,记住,游标永远只是你最后无奈之下的选择,而不是首选。

 1 --定义表变量
2
3 DECLARE @temp TABLE
4
5 (
6
7 [id] INT IDENTITY(1, 1) ,
8
9 [Name] VARCHAR(10)
10
11 )
12
13 DECLARE @tempId INT ,
14
15 @tempName VARCHAR(10)
16
17 DECLARE test_Cursor CURSOR LOCAL FOR
18
19 SELECT [id],[name] FROM @temp
20
21 --插入数据值
22
23 INSERT INTO @temp
24
25 VALUES ( 'a' )
26
27 INSERT INTO @temp
28
29 VALUES ( 'b' )
30
31 INSERT INTO @temp
32
33 VALUES ( 'c' )
34
35 INSERT INTO @temp
36
37 VALUES ( 'd' )
38
39 INSERT INTO @temp
40
41 VALUES ( 'e' )
42
43
44
45 --打开游标
46
47 OPEN test_Cursor
48
49 WHILE @@FETCH_STATUS = 0
50
51 BEGIN
52
53 FETCH NEXT FROM test_Cursor INTO @tempId,@tempname
54
55 PRINT 'Name:----' + @tempName
56
57 END
58
59 CLOSE test_Cursor
60
61 DEALLOCATE test_Cursor

参考链接:

SQL Server遍历表中记录的实现方法

SQL Server游标的使用

本文转自陈哈哈博客园博客,原文链接http://www.cnblogs.com/kissazi2/archive/2013/02/27/2935307.html如需转载请自行联系原作者

kissazi2

SQL Server遍历表中记录的2种方法的更多相关文章

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

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

  2. sql server遍历表不用游标和临时表的方法

    表结果如图 )) ,'Sky,Blue,Water' ,'Book,Apple,Shirt' ,'Cup,Yellow,org' ,'box,phone,paper' GO SELECT id,SUB ...

  3. SQL Server遍历表的几种方法 转载

    SQL Server遍历表的几种方法 阅读目录 使用游标 使用表变量 使用临时表 在数据库开发过程中,我们经常会碰到要遍历数据表的情形,一提到遍历表,我们第一印象可能就想到使用游标,使用游标虽然直观易 ...

  4. SQL Server遍历表的几种方法

    在数据库开发过程中,我们经常会碰到要遍历数据表的情形,一提到遍历表,我们第一印象可能就想到使用游标,使用游标虽然直观易懂,但是它不符合面向集合操作的原则,而且性能也比面向集合低.当然,从面向集合操作的 ...

  5. SQL Server 查看空间使用情况的 5 种方法

    解决方法: 方法 1.sp_spaceused 方法 2.dbcc sqlperf 方法 3.dbcc showfilestats 方法 4.dbcc showcontig 方法 5.sys.dm_d ...

  6. SQL Server 查看备份集元数据的 4 种方法。

    方法 1. restore labelonly 方法 2. restore headeronly 方法 3. restore filelistonly 方法 4. restore verifyonly ...

  7. sql server 遍历表成一棵树结构

    一棵树的层次结构都在一张表内,当有这样的需要的时候.. 可以这样玩: <!-- DepartmentDTO 对象对应 department表_查询sql --> <sql id=&q ...

  8. SQL Server 查看数据库空间分配情况的 2 种方法

    方法 1. sys.dm_db_file_space_usage. 方法 2. sys.dm_db_session_space_usage. ----------------------------- ...

  9. SQL Server中如何实现遍历表的记录

    SQL Server遍历表一般都要用到游标,SQL Server中可以很容易的用游标实现循环,实现SQL Server遍历表中记录. 但游标在实际的开发中都不推荐使用. 我们知道还可以借助临时表或表变 ...

随机推荐

  1. 初识docker与理解

    因最近公司的一个新项目,有一个业务场景是需要给多个甲方的服务器配置运行环境与部署,所以考虑使用docker来实现环境配置的统一 1.docker是什么 docker是一种容器虚拟化技术的实现,相当于在 ...

  2. 家庭版记账本app开发进度。开发到现在整个app只剩下关于图表的设计了,具体功能如下

    首先说一下自己的功能: 实现了用户的登录和注册.添加收入记账和添加支出记账.粗略显示每条账单基本情况.通过点击每条账单来显示具体的情况, 之后就是退出当前用户的操作. 具体的页面情况如下: 这就是整个 ...

  3. flask-sqlalchemy的基本使用

    flask-sqlalchemy 1 .配置应用和基本使用 和sqlalchemy一样,先定义好数据库配置和db_url.然后在app的config加入SQLALCHEMY_DATABASE_URI等 ...

  4. pythone 时间模块

    时间模块(时区) 计算方式:时间戳是一串数字,从计算机诞生的那一秒到现在过了多少秒,每过一秒+1 #时间戳#由时间戳获取格式化时间#由格式化时间获取时间戳 import time def timene ...

  5. Array(数组)对象-->concat() 方法

    1.定义和用法 concat() 方法用于连接两个或多个字符串. 语法: string.concat(string1, string2, ..., stringX) 举例: var str1='hel ...

  6. MySQL中information_schema 数据库 是干什么的

    MySQL中information_schema是什么 大家在安装或使用MYSQL时,会发现除了自己安装的数据库以外,还有一个information_schema数据库. information_sc ...

  7. Leetcode802-找到最终的安全状态(Python3)

    刚开始没思路,还以为是利用二维矩阵直接标记节点间的有向路径,最后循环遍历就能得到结果,结果最后发现方向是错的,之后看了大佬们写的代码,发现原来是用出度来实现节点是否安全的. 照着大佬们的思路重新写了一 ...

  8. selenium 元素定位常用的方法

    元素定位的方法有2个 driver.findElement(By.args) 返回值是WebElement            //此方法是获取单一的页面元素 driver.findElements ...

  9. SpringCloud(二)笔记之Eureka

    Eureka包含两个组件:Eureka Server和Eureka Client Eureka Server:提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册 Eureka ...

  10. Java中BigDecimal类

    由于在运算的时候,float类型和double很容易丢失精度,演示案例,所以,为了能精确地表示.计算浮点数,Java提供了BIgDecimal BigDecimal类的概述 不可变的.任意精度的有符号 ...