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

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
简介:

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

目录
相关文章
|
6月前
|
SQL 数据采集 关系型数据库
实现MySQL与SQL Server之间数据迁移的有效方法
总的来说,从MySQL到SQL Server的数据迁移是一个涉及到很多步骤的过程,可能会遇到各种问题和挑战。但只要精心规划、仔细执行,这个任务是完全可以完成的。
507 18
|
6月前
|
SQL Java 数据库连接
Java中实现SQL分页的方法
无论何种情况,选择适合自己的,理解了背后的工作原理,并能根据实际需求灵活变通的方式才是最重要的。
189 9
|
7月前
|
SQL 关系型数据库 MySQL
【MySQL】SQL分析的几种方法
以上就是SQL分析的几种方法。需要注意的是,这些方法并不是孤立的,而是相互关联的。在实际的SQL分析中,我们通常需要结合使用这些方法,才能找出最佳的优化策略。同时,SQL分析也需要对数据库管理系统,数据,业务需求有深入的理解,这需要时间和经验的积累。
264 12
|
7月前
|
SQL 关系型数据库 MySQL
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
|
8月前
|
SQL 数据库连接 Linux
数据库编程:在PHP环境下使用SQL Server的方法。
看看你吧,就像一个调皮的小丑鱼在一片广阔的数据库海洋中游弋,一路上吞下大小数据如同海中的珍珠。不管有多少难关,只要记住这个流程,剩下的就只是探索未知的乐趣,沉浸在这个充满挑战的数据库海洋中。
211 16
|
12月前
|
SQL 监控 安全
Flask 框架防止 SQL 注入攻击的方法
通过综合运用以上多种措施,Flask 框架可以有效地降低 SQL 注入攻击的风险,保障应用的安全稳定运行。同时,持续的安全评估和改进也是确保应用长期安全的重要环节。
482 71
|
SQL 安全 PHP
PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全
本文深入探讨了PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全。
609 4
|
SQL BI 数据库
SQL操作的一些基本方法
【10月更文挑战第27天】SQL操作的一些基本方法
181 3
|
SQL 监控 固态存储
SQL优化有哪些方法?
【10月更文挑战第27天】SQL优化有哪些方法?
418 3
|
SQL 存储 数据库
SQL部分字段编码设置技巧与方法
在SQL数据库管理中,设置字段的编码对于确保数据的正确存储和检索至关重要