使用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