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

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游标的使用

 

作者:kissazi2 
出处:http://www.cnblogs.com/kissazi2/ 
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载:http://www.cnblogs.com/kissazi2/archive/2013/02/27/2935307.html

时间: 2024-09-05 23:21:14

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

SQL Server遍历表中记录的2种方法(使用表变量和游标)_MsSql

SQL Server遍历表一般都要用到游标,SQL Server中可以很容易的用游标实现循环,实现SQL Server遍历表中记录.本文将介绍利用使用表变量和游标实现数据库中表的遍历. 表变量来实现表的遍历 以下代码中,代码块之间的差异已经用灰色的背景标记. 复制代码 代码如下: DECLARE @temp TABLE ( [id] INT IDENTITY(1, 1) , [Name] VARCHAR(10) ) DECLARE @tempId INT , @tempName VARCHAR(

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(

SQL Server 2005定时备份设置的2种方法

方法一 SQL Server 2005的定时备份功能很好用,每天定时备份,可以确保数据的安全. 定时备份的设置也很简单,第一步,进入Microsoft SQL Server Management Studio-->管理-->维护计划,新建维护计划.然后设置时间,点击右侧红色叉旁边的三点进行配置,设置完成之后确定即可.再然后,从左侧的"维护计划中的任务"拖动"备份数据库任务"到右侧,双击任务进行设置,选择需要备份的数据库.备份类型和备份地址,最后,保存计划

SQL Server 2008 数据库中创建只读用户的方法_mssql2008

在SQL Server 2008中,为了保护数据库的安全,需要给不同的使用者开通不同的访问用户,那么如何简单的控制用户的权限呢?下面我们就创建一个只读用户,给大家学习使用. SQL Server 2008 Microsoft SQLServer Management Studio 1.首先打开[Microsoft SQLServer Management Studio],用管理员账户登录.这里我选的服务器是[local],账户是[windows身份验证],如果是连接远程的服务器,输入远程服务器地

SQL Server 2005删除日志文件的几种方法

  使用MS数据库的朋友就会知道一个问题,C盘的空间很容易被占满了.因为本来系统盘就分区比较小,这是由于数据库在使用过程中会使日志文件不断增加,使得数据库的性能下降,并且占用大量的磁盘空间.SQL Server数据库都有log文件,log文件记录用户对数据库修改的操作.可以通过直接删除log文件和清空日志在清除数据库日志. 一.删除LOG 1.分离数据库.分离数据库之前一定要做好数据库的全备份,选择数据库--右键--任务--分离. 勾选删除连接 分离后在数据库列表将看不到已分离的数据库. 2.删

SQL Server 2005删除日志文件的几种方法小结

SQL Server数据库都有log文件,log文件记录用户对数据库修改的操作.可以通过直接删除log文件和清空日志在清除数据库日志   使用MS数据库的朋友就会知道一个问题,C盘的空间很容易被占满了.因为本来系统盘就分区比较小,这是由于数据库在使用过程中会使日志文件不断增 加,使得数据库的性能下降,并且占用大量的磁盘空间.SQL Server数据库都有log文件,log文件记录用户对数据库修改的操作.可以通过直接删 除log文件和清空日志在清除数据库日志. 一.删除LOG 1.分离数据库.分离

SQL Server 2005删除日志文件的几种方法小结_mssql2005

使用MS数据库的朋友就会知道一个问题,C盘的空间很容易被占满了.因为本来系统盘就分区比较小,这是由于数据库在使用过程中会使日志文件不断增加,使得数据库的性能下降,并且占用大量的磁盘空间.SQL Server数据库都有log文件,log文件记录用户对数据库修改的操作.可以通过直接删除log文件和清空日志在清除数据库日志. 一.删除LOG1.分离数据库.分离数据库之前一定要做好数据库的全备份,选择数据库--右键--任务--分离. 勾选删除连接 分离后在数据库列表将看不到已分离的数据库. 2.删除LO

SQL Server 数据库访问操作通用类五种方法

对SQL Server数据库的操作,最常见的有如下五种: 1.非连接式查询,获取DataTable. 2.连接式查询,获取DataReader. 3.查询结果只有1行1列,获取单一数据. 4.对数据库进行增.删.改操作,进行数据编辑. 5.判断与数据库是否已连接.(更新) 针对以上情况,分享的一个SQL Server数据库访问通用类.该通用类可用于ASP.NET和C/S系统中开发.  1.非连接式查询,获取DataTable. 利用SqlDataAdapter对象的Fill()返回DataTab

sql server 解密-请问Microsoft SQL Server 2005数据库中加密记录解密方法

问题描述 请问Microsoft SQL Server 2005数据库中加密记录解密方法 请问Microsoft SQL Server 2005数据库中类似 0MHCkgK7c4E= 的记录(共12位)是使用什么算法加密得到的?能否提供解密的方式或网址,谢谢! 解决方案 有些用到了base64来加密