SQL Server中Rowcount与@@Rowcount的用法
MySQL这个名字是怎么来的已经不清楚了。基本指南和大量的库和工具带有前缀“my”已经有10年以上,而且不管怎样,MySQLAB创始人之一的的女儿也叫My。rowcount的用法:rowcount的感化就是用来限制前面的sql在前往指定的行数以后便中断处置,好比上面的示例,
setrowcount10
select*from表A
如许的查询只会前往表A中的前10条数据。它和"selecttop10*from表A"的感化一样。注重一点,setrowcount的设置会在全部会话中无效。好比上面的sql示例:
setrowcount10
select*from表A
go
select*from表B
表A和表B都只会前往前10条数据。
要作废setrowcount的限制,只需设置setrowcount0就能够了。
从下面的示例来看,仿佛rowcount没有多年夜的用途,限定查询了局的数据,我们利用top就能够了,并且还不必忧虑假如健忘作废rowcount的设置而对前面的sql的影响。但鄙人面的情形下,rowcount的设置就会给我们带来很年夜的便利哦。
我们都晓得selecttop前面不克不及加参数,只能利用一个详细的int范例的数字。假如我们想完成top前面跟参数的功效,就只要机关sql字符串,然后利用exec来实行了。好比:
declare@nint
declare@sqlnvarchar(1000)
set@n=10
set@sql=selecttop+cast(@nasvarchar(10))+*from表A
exec(@sql)
先不说下面语句中exec的功能,单从sql的可读性下去看就很不友爱。但假如我们利用rowcount来办理,就显的很文雅了,由于setrowcount前面是可使用参数的。示比方下:
declare@nint
set@n=10
setrowcount@n
select*from表A
注重:setrowcount的限制对修正,删除一样无效。好比上面的示例:
setrowcount10
update表asetqty=10whereid<100
如许,下面语句最多只会修正表a中id<100的前10条数据(假定id<100的数据数目年夜于10)
删除也是一样
setrowcount10
deletefrom表a
如许,下面的语句最多只会删除表a中前10条数据。
@@Rowcount的用法
@@Rowcount与Rowcount看起来很像,只相差了两个@,但它们的功效是纷歧样的,@@Rowcount次要是前往前次sql语句所影响的数据行数,好比:
selecttop2*from表A
select@@Rowcount
假如表A中的数据量年夜于或即是2,那末select@@Rowcount就会前往2,假如只要1条或0条数据,那末select@@Rowcount就会前往1大概0。
注重,不要把@@Rowcount了解为只前往查询的了局数目,删除,修正,新增等语句,也会准确的前往@@Rowcount值。好比:
update表Asetgid=awheregid=a
select@@Rowcount
假如表A中存在gid=a的数据,那末select@@Rowcount就会前往它所修正数据的行数,假如不存在gid=a的数据,那末select@@Rowcount就会前往0,删除与新增都是一样。
那末,哪些中央我们会用到@@Rowcount呢?
1、大概我们见到@@Rowcount身影最多的中央是触发器中,好的触发器,一样平常城市在最后面加上if@@rowcount=0return语句,好比:
createtriggerti_tableaontableaafterupdate
as
if@@rowcount=0return
……
如许,假如tablea被修正的数据行数为0,那末触发器ti_tablea就会间接加入,而不必实行前面的代码了。
2、第二个大概用到的中央就是我们可使用@@rowcount来作递回或轮回。好比上面示例:
declare@nint
set@n=1
select*fromclient_goodswhereid=@n
while@@rowcount>0
begin
set@n=@n+1
select*fromclient_goodswhereid=@n
end
这个示例是先查询client_goods中是不是有id=1的数据,假如有,再查询是不是有id=2的数据,一向查下往,直到id没有一连为止。固然人人在看这个示例的时分不要思索这个示例的意义,它只是申明了@@rowcount能够作为轮回前提来用。
rowcount与@@rowcount的别的用法,接待人人在批评中增补。mysqld进程在一个写入当中被杀死;计算机的意外关闭(例如,如果计算机掉电);一个硬件错误。 在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。 发几份SQL课件,以飨阅者 索引视图2k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。 如果处理少量数据,比如几百条记录的数据,我不知道这两种情况哪个效率更高,如果处理大量数据呢?比如有表中有20万条记录. 无法深入到数据库系统层面去了解和探究 所以你总能得到相应的升级版本,来满足你的需求。 始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。
页:
[1]