SQL Server中Rowcount与@@Rowcount的用法
rowcount的作用就是用来限定后面的sql在返回指定的行数之后便停止处理,比如下面的示例,set rowcount 10
select * from 表A这样的查询只会返回表A中的前10条数据。它和 "select top 10 * from 表A" 的作用一样。注意一点,set rowcount 的设置会在整个会话中有效。比如下面的sql示例:set rowcount 10
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 @n int
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后面是可以使用参数的。示例如下:declare @n int
set @n=10
set rowcount @n
select * from 表A注意:set rowcount的限定对修改,删除一样有效。比如下面的示例:set rowcount 10
update 表a set qty=10 where id<100这样,上面语句最多只会修改表a中id<100的前10条数据(假设id<100的数据数量大于10)删除也是一样set rowcount 10
delete from 表a这样,上面的语句最多只会删除表a中前10条数据。
@@Rowcount的用法
@@Rowcount与Rowcount看起来很像,只相差了两个@,但它们的功能是不一样的,@@Rowcount主要是返回上次sql语句所
影响的数据行数,比如:select top 2 * from 表A
select @@Rowcount如果表A中的数据量大于或等于2,那么select @@Rowcount就会返回2,如果只有1条或0条数据,那么select @@Rowcount就会返回1或者0。注意,不要把@@Rowcount理解为只返回查询的结果数量,删除,修改,新增等语句,也会正确的返回@@Rowcount值。比如:update 表A set gid='a' where gid='a'
select @@Rowcount如果表A中存在gid='a'的数据,那么select @@Rowcount就会返回它所修改数据的行数,如果不存在gid='a'的数据,
那么select @@Rowcount就会返回0,删除与新增都是同样。那么,哪些地方我们会用到@@Rowcount呢?
一、可能我们见到@@Rowcount身影最多的地方是触发器中,好的触发器,一般都会在最前面加上if @@rowcount=0 return语句,比如:create trigger ti_tablea on tablea after update
as
if @@rowcount=0 return
……这样,如果tablea被修改的数据行数为0,那么触发器ti_tablea就会直接退出,而不用执行后面的代码了。二、第二个可能用到的地方就是我们可以使用@@rowcount来作递归或循环。比如下面示例:declare @n int
set @n=1
select * from client_goods where id=@nwhile @@rowcount>0
begin
set @n=@n+1
select * from client_goods where id=@n
end这个示例是先查询client_goods中是否有id=1的数据,如果有,再查询是否有id=2的数据,一直查下去,直到id
没有连续为止。当然大家在看这个示例的时候不要考虑这个示例的意义,它只是说明了@@rowcount可以作为循环条件来用。
SQL Server中Rowcount与@@Rowcount的用法相关推荐
- SQL Server 中 with tmp 临时表的用法
SQL Server 中 with tmp 临时表的用法 ----------with临时表用法,有时候采用临时表比采用in的效率更高,避免了全表扫描. 实例中实现了查询普通题.大题.子题目的sql ...
- SQL Server中的锁类型及用法(转载)
一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新 A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 脏读 ...
- SQL Server中LIKE和PATINDEX的用法
在SQL Server中,能使用通配符的只有2个:LIKE.PATINDEX. 不过LIKE支持2种通配符转义,无限制最全面:而PATINDEX只支持最简单的通配符转义([]转义),限制较多. LIK ...
- SQL Server中osql/sqlcmd的基本用法
[转自] http://www.cnblogs.com/wontonJ/archive/2011/06/18/2084400.html 这段时间在做项目的时候,遇到一个问题,客户的程序要架设在自己的服 ...
- Sql Server中 master.dbo.spt_values 的用法
master.dbo.spt_values是一个数据库常量表,表里都是一些枚举数据. 我们可以先查询一下看表里都有什么☞ select * from master.dbo.spt_values 查询得 ...
- MS SQL SERVER 中几个函数的用法
1.STUFF 将第一个参数,从第start位置开始的length个字符(包含第start位置,位置从1开始),用第四个参数替换. Syntax ( character_expression , st ...
- SQL Server中identity(自增)的用法
目录 零.码仙励志 一.identity的基本用法 1.含义 2.语法 3.实例演示 4.删除一条记录接着插入 二.重新设置identity的值 1.语法 2.实例演示 三.向identity字段插入 ...
- SQL Server中的登录触发器概述
This article gives you an overview of Logon triggers in SQL Server and its usage to control SQL Serv ...
- mysql identity sql_SQL Server中identity(自增)的用法详解
一.identity的基本用法 1.含义 identity表示该字段的值会自动更新,不需要我们维护,通常情况下我们不可以直接给identity修饰的字符赋值,否则编译时会报错 2.语法 列名 数据类型 ...
- SQL Server中@@ROWCOUNT的用法
转自:http://www.studyofnet.com/news/146.html 本文导读:@@ROWCOUNT返回上一语句受影响的行数!和@ERROR一样的特性,在每一条语句执行后都将被重置,如 ...
最新文章
- java 获取手机归属地,引起net.UnknownHostException错误
- openstack 重启mysql_openstack 重启服务命令
- ECCV 2020 论文大盘点-3D人体姿态估计篇
- 02_使用jq实现进入和离开动画
- 灰度董事总经理:BTC突破2万美元并不令人惊讶
- Redis数据结构详解之Zset(五)
- iOS开发之cocoapods安装(2017)
- 分页解决方案 之 分页算法——Pager_SQL的思路和使用方法
- cad相对坐标快捷键_CAD快捷键及命令大全
- 伊对和连信交友相亲聊天平台靠谱吗?
- python读取邮箱邮件_Python读取我的outlook邮箱并分析邮件
- 美国会委员会建议禁止中国国企收购美国资产
- angular cli + primeNG
- SpringBoot的统一日志记录
- python制作浏览器
- php 数字上下选取,PHP中常见的数字掐头去尾操作方法
- OpenAI 最强对话模型 ChatGPT: 用户已破百万,落地将有几何
- Android RenRen SDK 接入教程
- HtmlCss光标(插入符caret)透明隐藏光标 221106笔记
- 云教室桌面虚拟化环境搭建——flexVDI Dashboard 3.0 云桌面管理系统的使用