SQL--Rowcount、@@Rowcount、SET NOCOUNT的用法
一,rowcount的用法
作用:rowcount的作用就是限定后面sql语句的返回行数,
set rowcount 10
select * from table
查询的结果只会返回表table中的前10条数据。它和 "select top 10 * from table" 的作用一样。set rowcount 的设置会在整个会话中有效。比如下面的sql示例:
set rowcount 10
select * from table1
go
select * from table2
table1和table2都只会返回前10条数据。
对于删除和更新也可以限定
set rowcount 10
update table1 set neme=‘张三’ --更新table1前10行数据
set rowcount 10
delete from table1 --删除table1前10行数据
要取消set rowcount的限定,只要设置 set rowcount 0 就可以了.
存储过程写法举例:
declare @n int --声明参数‘N’
set @n=10 --设置n=10
set rowcount @n --限定返回行数
select * from 表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 name='张三' where name='李四'
select @@Rowcount --查询更新的行数
如果表A中存在name='李四'的数据,那么select @@Rowcount就会返回它所修改数据的行数,如果不存在name='李四'的数据,那么select @@Rowcount就会返回0,删除与新增都是同样。
存储过程写法举例:
declare @n int --声明参数N
set @n=1 --赋值N为1
select * from table1 where id=@n --查询表中id为1的数据
while @@rowcount>0 --循环如果查询到id为1的行数大于0。如果有等于1的数据,返回的行数肯定是大于0的
begin
set @n=@n+1 --继续给N赋值加1
select * from table1 where id=@n --查询表中ID等于N的数据
end
这个示例是先查询表中是否有id=1的数据,如果有,再查询是否有id=2的数据,一直查下去,直到id没有连续为止。
三,SET NOCOUNT的用法
作用:阻止在结果集中返回显示受T-SQL语句或则usp影响的行计数信息。
当SET ONCOUNT ON时候,不返回计数,当SET NOCOUNT OFF时候,返回计数;
即使当SET NOCOUNT ON 时候,也更新@@RowCount;
当SET NOCOUNT on时候,将不向客户端发送存储过程每个语句的DONE_IN_proc消息,如果存储过程中包含一些并不返回实际数据的语句,网络通信流量便会大量减少,可以显著提高应用程序性能;
SET NOCOUNT 指定的设置时在执行或运行时候生效,分析时候不生效
举例:
SET NOCOUNT ON
update table1 set='张三'
返回:命令已经成功完成
使用SET NOCOUNT OFF
update table1 set='张三'
返回:受影响的行数