[SQL]使用@@ROWCOUNT全域變數要注意的地方!
前言
@@ROWCOUNT,傳回受到前一個陳述式所影響的資料列數。如果資料列的數目超過 20 億,請使用 ROWCOUNT_BIG。(From SQL HELP 說明)
練習1
請看以下的SQL語法,那個字會PRINT出來呢?
IF @@ROWCOUNT = 0 BEGIN PRINT '@@ROWCOUNT = 0' END --因為執行IF,所以@@ROWCOUNT的值被改成了0 IF @@ROWCOUNT > 0 BEGIN PRINT '@@ROWCOUNT > 0' END
您可能會以為是”@@ROWCOUNT > 0”,但事實上,PRINT都不會被執行到!
因為在執行IF @@ROWCOUNT = 0這個陳述式,因為都沒有影響任何資料,所以@@ROWCOUNT就被改成了0。所以接下來@@ROWCOUNT就不會>0,所以也就不會執行>0內的指令。
練習2
那我們再將SQL改一下呢? 改將ELSE時再去判斷OK嗎? ”@@ROWCOUNT > 0”會被印出來嗎?
--顯示目前@@ROWCOUNT值為1 IF @@ROWCOUNT = 0 BEGIN PRINT '@@ROWCOUNT = 0' END ELSE BEGIN PRINT '@@ROWCOUNT > 0' END
因為只判斷一次,所以PRINT '@@ROWCOUNT > 0'是會被執行到!
結論
如果要拿某次的@@ROWCOUNT來判斷的話,只能判斷一次,如果要判斷多次的話,就要先把@@ROWCOUNT的值存到LOCAL變數,再去判斷這個LOCAL變數,才不會每RUN一個SQL,就會影響到@@ROWCOUNT的值。
SELECT GETDATE() --目前日期 SET @CNT = @@ROWCOUNT IF @CNT = 0 BEGIN PRINT '@@ROWCOUNT = 0' END IF @CNT > 0 BEGIN PRINT '@@ROWCOUNT > 0' END
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^