SQL Server中Rowcount与@@Rowcount的用法

时间:2022-04-25 04:41:36

使用rowcount

rowcount的作用就是用来限定后面的sql在返回指定的行数之后便停止处理,

rowcount的设置会在整个会话中有效

SET ROWCOUNT 10
SELECT * FROM dbo.Customer ORDER BY id desc

使用完之后可以设置为:

SET ROWCOUNT 0

表示下面的查询或者其他操作就可以操作全部,

否则在下面的代码中可能还使用设置为10的这个数量

因为这个 设置:SET ROWCOUNT 10 是针对整个会话的

 

使用top:

后面不能加动态参数,只能跟整数

select top 10 *  from dbo.Customer ORDER BY id DESC

如果要加,需要使用拼字符串的方式

比如:

declare @n int
declare @sql nvarchar(1000)
set @n=10
set @sql='select top '+cast(@n as varchar(10))+' * from dbo.Customer'
exec(@sql)

性能和可读性都不如rowcount

另外rowcount的作用

还可以用于修改和删除


@@rowcount返回影响上次sql语句所影响的行数

select top 2 * from Customer
select @@Rowcount

--如果表存在的数据大于等于2,则返回2
--如果为1或者0,则@@rowcount返回也是1或者0

注意:删除 修改 查询,新增 都会返回受影响的行数

这玩意用的比较多的对方是:触发器

例如

create trigger ti_tablea on Customer after update
as
if @@rowcount=0 return
……

这样表Customer 受影响的行数如果为0,触发器就会直接退出,不会在继续往下执行

 

第二个用的地方可能是递归或者循环

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