转载——SQL Server中Rowcount与@@Rowcount的用法
转载自:http://www.lmwlove.com/ac/ID943
rowcount的用法:
rowcount的作用就是用来限定后面的sql在返回指定的行数之后便停止处理,比如下面的示例,
select * from 表A
这样的查询只会返回表A中的前10条数据。它和 "select top 10 * from 表A" 的作用一样。注意一点,set rowcount 的设置会在整个会话中有效。比如下面的sql示例:
select * from 表A
go
select * from 表B
表A和表B都只会返回前10条数据。
要取消set rowcount的限定,只要设置 set rowcount 0 就可以了。
从上面的示例来看,好像rowcount没有多大的用处,限制查询结果的数据,我们使用top就可以了,而且还不用担心如果忘记取消rowcount的设置而对后面的sql的影响。 但在下面的情况下,rowcount的设置就会给我们带来很大的方便哦。
我们都知道select top 后面不能加参数,只能使用一个具体的int类型的数字。如果我们想实现top后面跟参数的功能,就只有构造sql字符串,然后使用exec来执行了。比如:
declare @sql nvarchar(1000)
set @n=10
set @sql='select top '+cast(@n as varchar(10))+' * from 表A'
exec(@sql)
先不说上面语句中exec的性能,单从sql的可读性上来看就很不友好。但如果我们使用rowcount来解决,就显的很优雅了,因为set rowcount后面是可以使用参数的。示例如下:
set @n=10
set rowcount @n
select * from 表A
注意:set rowcount的限定对修改,删除一样有效。比如下面的示例:
update 表a set qty=10 where id<100
这样,上面语句最多只会修改表a中id<100的前10条数据(假设id<100的数据数量大于10)
删除也是一样
delete from 表a
这样,上面的语句最多只会删除表a中前10条数据。
@@Rowcount的用法
@@Rowcount与Rowcount看起来很像,只相差了两个@,但它们的功能是不一样的,@@Rowcount主要是返回上次sql语句所影响的数据行数,比如:
select @@Rowcount
如果表A中的数据量大于或等于2,那么select @@Rowcount就会返回2,如果只有1条或0条数据,那么select @@Rowcount就会返回1或者0。
注意,不要把@@Rowcount理解为只返回查询的结果数量,删除,修改,新增等语句,也会正确的返回@@Rowcount值。比如:
select @@Rowcount
如果表A中存在gid='a'的数据,那么select @@Rowcount就会返回它所修改数据的行数,如果不存在gid='a'的数据,那么select @@Rowcount就会返回0,删除与新增都是同样。
那么,哪些地方我们会用到@@Rowcount呢?
一、可能我们见到@@Rowcount身影最多的地方是触发器中,好的触发器,一般都会在最前面加上if @@rowcount=0 return语句,比如:
as
if @@rowcount=0 return
……
这样,如果tablea被修改的数据行数为0,那么触发器ti_tablea就会直接退出,而不用执行后面的代码了。
二、第二个可能用到的地方就是我们可以使用@@rowcount来作递归或循环。比如下面示例:
set @n=1
select * from client_goods where id=@n
while @@rowcount>0
begin
set @n=@n+1
select * from client_goods where id=@n
end
这个示例是先查询client_goods中是否有id=1的数据,如果有,再查询是否有id=2的数据,一直查下去,直到id没有连续为止。当然大家在看这个示例的时候不要考虑这个示例的意义,它只是说明了@@rowcount可以作为循环条件来用。
rowcount与@@rowcount的其它用法,欢迎大家在评论中补充。
说明:所有来源为 .net学习网 的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
转载——SQL Server中Rowcount与@@Rowcount的用法的更多相关文章
- SQL Server 中 with tmp 临时表的用法
SQL Server 中 with tmp 临时表的用法 ----------with临时表用法,有时候采用临时表比采用in的效率更高,避免了全表扫描. 实例中实现了查询普通题.大题.子题目的sql ...
- [转载]SQL Server中的事务与锁
了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器. 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂,不能保证数据的安全正确读写. 死锁: ...
- SQL Server中LIKE和PATINDEX的用法
在SQL Server中,能使用通配符的只有2个:LIKE.PATINDEX. 不过LIKE支持2种通配符转义,无限制最全面:而PATINDEX只支持最简单的通配符转义([]转义),限制较多. LIK ...
- 转载 SQL Server中索引管理之六大铁律
转载原地址 http://jingyan.baidu.com/article/48a42057c03bd7a924250429.html 索引是以表列为基础的数据库对象.索引中保存着表中排序的索引列, ...
- SQL Server中row_number函数的简单用法
一.SQL Server Row_number函数简介 ROW_NUMBER()是一个Window函数,它为结果集的分区中的每一行分配一个连续的整数. 行号以每个分区中第一行的行号开头. 以下是R ...
- SQL Server 中的SET XACT_ABORT各种用法及显示结果
源地址:http://www.cnblogs.com/rob0121/articles/2320932.html 点击进入 默认行为:默认为SET XACT_ABORT OFF,没有事务行为. S ...
- SQL Server中@@ROWCOUNT的用法
SQL Server中@@ROWCOUNT返回受上一语句影响的行数,返回值类型为 int 整型. 如果行数大于 20 亿,则需要使用 ROWCOUNT_BIG. @@ROWCOUNT和@@ERROR变 ...
- SQL Server中的@@ROWCOUNT
SQL Server中@@ROWCOUNT返回受上一语句影响的行数,返回值类型为 int 整型. 如果行数大于 20 亿,则需要使用 ROWCOUNT_BIG. @@ROWCOUNT和@@ERROR变 ...
- SQL点滴31—SQL语句中@@IDENTITY和@@ROWCOUNT区别
原文:SQL点滴31-SQL语句中@@IDENTITY和@@ROWCOUNT区别 SQL语句中@@IDENTITY和@@ROWCOUNT区别 在一条 INSERT.SELECT INTO 或大容量复制 ...
随机推荐
- CentOS 7 之安装X Window System
网上说的直接 yum groupinstall "Desktop"经实验,在我的机器上是无效的.我使用的是: yum groupinstall 'GNOME Desktop' 才o ...
- 国内开源html5游戏引擎全收录
本文引自<国内开源html5游戏引擎全收录> 游戏开发这潭水太深,英文水平太差,不敢看国外的, 而且这几年国内技术水平也挺高了不少,特别是JS方面.(我个人感觉) 最近看了几个国产的js游 ...
- VS Code 项目编译
编译运行vs code源码 如果我们想本地运行 vs code 需要安装一些必要的库. 我们需要安装 'Node.JS' . 这里需要注意的是,最低版本要求是'5.1.0'. 还需要安装 'Pytho ...
- html5 利用canvas实现简单的人物走动
最近在学习html5,其中涉及到很关键的元素canvas-画布,在网上下载了一些游戏源代码,虽然能看懂,但是想单独地针对某个功能提取出来还是有难处的,于是乎自己又上网查找了一些例子,才将超级玛丽简单的 ...
- DZ 3.2 URL 伪静态配置 教程
原文转自:http://www.zccode.com/thread-682-1-1.html 教程说明: 1 首先需要下载URL重写工具,拷到服务器下面安装即可,这里配置IIS7(x64)伪静态. 工 ...
- javascript 正则匹配手机号码
<form class="form-horizontal" name="mobileform" style="padding:10px;&q ...
- Python中的正斜杠与反斜杠
首先,"/"左倾斜是正斜杠,"\"右倾斜是反斜杠,可以记为:除号是正斜杠一般来说对于目录分隔符,Unix和Web用正斜杠/,Windows用反斜杠,但是现在Wi ...
- 找不到请求的 .Net Framework Data Provider。可能没有安装。
解决方法: 安装Microsoft SQL Server Compact 4.0. 安装Microsoft SQL Server Compact 4.0之后,程序运行正常. 问题的原因就是程序连接.s ...
- 文件磁盘读写类CArchive类
CArchive类的成员 数据成员 m_pDocument 指向被串行化的CDocument对象 构造函数 Carchive 创建一个Carhcive对象 Abort在不异常的情况下,关闭归档文件 C ...
- android上传图片至服务器
本实例实现了android上传手机图片至服务器,服务器进行保存 服务器servlet代码publicvoid doPost(HttpServletRequest request, HttpServle ...