SQL Server中Rowcount与@@Rowcount的用法
2021/10/13 19:14:37
本文主要是介绍SQL Server中Rowcount与@@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设置为0即可。
@@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=@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可以作为循环条件来用。
来源:https://blog.csdn.net/a3060858469/article/details/80859849
只增加了rowcount全部显示的一行。
这篇关于SQL Server中Rowcount与@@Rowcount的用法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-01-08Docker下的SqlServer发布订阅启用
- 2023-06-05Docker安装MS SQL Server并使用Navicat远程连接
- 2023-05-25深入浅出 SQL Server CDC 数据同步
- 2023-05-12通过空间占用和执行计划了解SQL Server的行存储索引
- 2023-04-24以SQLserver为例的Dapper详细讲解
- 2022-11-30SQL server高级函数查询
- 2022-11-26SQL SERVER数据库服务器CPU不能全部利用原因分析
- 2022-11-21SQL Server 时间算差值/常用函数
- 2022-11-20调试Archery连接SQL Server提示驱动错误
- 2022-10-22SQL Server 完整、差异备份+完整、差异还原(详细讲解,规避错误)