ROWCOUNT sql
做用:限定後面的sql在返回指定的行數以後便中止處理(查詢 刪除 更新都有效)spa
set rowcount 10 select * from 表A 這樣的查詢只會返回表A中的前10條數據
注意,set rowcount 的設置會在整個會話中有效。要取消set rowcount的限定,只要在後面設置 set rowcount 0 就能夠了code
同 top遞歸
從上面的示例來看,好像rowcount沒有多大的用處,限制查詢結果的數據,咱們使用top就能夠了,並且還不用擔憂若是忘記取消rowcount的設置而對後面的sql的影響table
ROWCOUNT 與 TOP的區別class
select TOP 後面不能加參數,只能使用一個具體的int類型的數字cli
select top 5
date
declare @n intselect
set @n=10sql語句
set rowcount @n
select * from 表A
@@ROWCOUNT
返回上次sql語句所影響的數據行數(查詢 刪除 更新)
select top 2 * from 表A
select @@Rowcount
那麼,哪些地方咱們會用到@@Rowcount呢?
1、可能咱們見到@@Rowcount身影最多的地方是觸發器中,好的觸發器,通常都會在最前面加上if @@rowcount=0 return語句,好比:
create trigger ti_tablea on tablea after update
as
if @@rowcount=0 return
……
這樣,若是tablea被修改的數據行數爲0,那麼觸發器ti_tablea就會直接退出,而不用執行後面的代碼了。
2、第二個可能用到的地方就是咱們能夠使用@@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能夠做爲循環條件來用。