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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266378.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全国计算机等级考试题库二级C操作题100套(第51套)

第51套: 给定程序中,函数fun的功能是:计算出形参s所指字符串中包含的单词个数, 作为函数值返回。为便于统计,规定各单词之间用空格隔开。 例如,形参s所指的字符串为:This is a C language program.&#x…

python 创建文件_Python入学首次项目,新手必看,简单易操作

继昨天文章python软件pycharm安装教程之后,今天则给新手小白们分享一哈,怎么制作并创建文件。print “hello world”;如后期需要资料文件的则可以私信留言,领取首次项目资料。本节知识点:python项目的创建pycharm的使用…

php柱形图 数据sql,ThinkPHP 5.1 读取数据库中的图片

如果一个图片直接存在数据库中,可以用以下方法读出来。环境ThinkPHP 5.1 ,sqlsrv,pdo_sqlsrv代码//pdo 方式$pdonew PDO(sqlsrv:Serverlocalhost;DatabaseSD31022_Sample, sa, Sql2008);$stmt$pdo->prepare(select picture from crm_affixinfo where …

Babelfish

题目描述 You have just moved from Waterloo to a big city. The people here speak an incomprehensible dialect of a foreign language. Fortunately, you have a dictionary to help you understand them.输入 Input consists of up to 100,000 dictionary entries, follo…

ajax跨域实现

2019独角兽企业重金招聘Python工程师标准>>> 我们都知道ajax是不能跨域的,那么怎么实现ajax跨域呢? 看了看jquery,当然,jquery封装的很好,$.ajax就可以实现跨域,只需要在参数中配置一下即可&am…

全国计算机等级考试题库二级C操作题100套(第52套)

第52套: 给定程序中,函数fun的功能是:将NN矩阵中元素的值按列右移1个位置, 右边被移出矩阵的元素绕回左边。例如,N3,有下列矩阵 1 2 3 4 5 6 7 8 9 计算结果为 3 1 2 6 4 5 9 7 8 请在程序的下划线处填入正…

python leetcode_leetcode 刷题经验,主力 python

1. 树的先序遍历可以求高度,后序遍历可以求深度。剑指 Offer 55 - II. 平衡二叉树​leetcode-cn.com2. 二叉搜索树的中序遍历可以递增地返回所有元素。逆序的中序遍历(即先右子节点,再根节点,再左子节点)可以递减的返回…

普及几个小常识,新手技能补充

一,如何设置门户或者论坛为首页?后台界面》导航管理,看向每个导航的最后面,有选择是否设置为首页,选中的即为打开之后的首页。二,如何添加二级导航,后台界面》导航管理,添加二级导航…

sqlldr 导入乱码,Oracle客户端字符集问题

2019独角兽企业重金招聘Python工程师标准>>> 1,查Oracle数据库创建时候的字符集: Oracle服务器端执行 SQL> select name, value$ from sys.props$ where name like NLS%; NAME VALUE$ ------------------------------ -------------------…

全国计算机等级考试题库二级C操作题100套(第53套)

第53套: 函数fun的功能是:计算请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序…

python中hashmap的方法_如何为Java的HashMap模拟Python的dict的“ items(...

我知道我应该学习如何使用Java进行高效编程,而不再认为它是Python.但是问题在于,这种事情在Java中变成了一场噩梦. 我在Python中具有以下函数,该函数将字符串作为参数: def decodeL(input): L [] for i in range(len(input)): for j in x.items(): // Where "…

Python在mysql中进行操作是十分容易和简洁的

首先声明一下,我用的是Windows系统! 1、在Python中对mysql数据库进行操作首先要导入pymysql模块,默认情况下,Python中是没有安装这个模块的, 可以在Windows的命令行中用pip install pymysql来安装(注意要连…

讲php fpm的书,细说PHP-fpm

最近在研究PHP的源码,有时候会延伸到很多东西。这里就专程找了下php-fpm的内容学习下。是什么?在理解php-fpm之前,我们要先搞清楚几个关键词以及他们之间的关系:CGIFastCGIphp-fpmphp-cgi.CGI:(Common Gateway Interface),即通用网…

J2SE综合对java util的总结 一

J2SE综合对java util的总结 一 java.util包中包含了一些在Java 2中新增加的最令人兴奋的增强功能:类集。一个类集(collection)是一组对象。类集的增加使得许多java.util中的成员在结构和体系结构上发生根本的改变。它也扩展了包可以被应用的任…

全国计算机等级考试题库二级C操作题100套(第54套)

第54套: 给定程序中,函数fun的功能是:计算出带有头结点的单向链表中各结点数据域中值之和作为函数值返回。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中…

安卓微软雅黑字体ttf_618巨献丨精致的悦黑5字重小字体

悦黑字体简介去年双十一当天,小编应大家要求,分享了一款悦黑小字体,苹果和安卓都有:双十一巨献:令人瑟瑟发抖的5字重悦黑小字体大半年时间过去了,一直没有更新,今天抽空更新一下。悦黑是由造字工…

全国计算机等级考试题库二级C操作题100套(第55套)

第55套: 给定程序中,函数fun的功能是:判断形参s所指字符串是否是"回文" (Palindrome),若是,函数返回值为1;不是,函数返回值为0。“回文” 是正读和反读都一样…

面试的问题 及回答

1、Postmessage 与 SendMessage的区别 PostMessage该函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回,是异步消息模式。消息队列里的消息通过调用GetMessage和PeekMessage取得 SendMes…

伪静态隐藏域名后缀_你想知道的动态URL、静态URl、伪静态URL概念及区别都在这里!...

【小宅按】我们说url的动态、静态、伪静态三种形式,其实从严格分类上来说,伪静态也是动态的一种,只是表现形式为静态。参考:动态url、静态url和伪静态url的详细讲解 - 好文分享动态URl动态页面的特征1、以ASP、PHP、JSP、ASP.NET …

700多位老人的“智慧”养老记

“智慧”养老,受益的不只是居住养老公寓的老年人,养老机构本身也受益匪浅。 2012年12月,由汇晨养老公司机构管理有限公司(简称汇晨养老公司)与NEC中国共同开发的智能老年公寓信息化系统投入运行,生活在北京昌平区北七家汇晨老年公…