from:http://blog.163.com/rihui_7/blog/static/212285143201381343240404/
返回受上一語句影響的行數。 如果行數大於 20 億,請使用 ROWCOUNT_BIG。
Transact-SQL 語句可以通過下列方式設置 @@ROWCOUNT 的值:
將 @@ROWCOUNT 設置為受影響或被讀取的行的數目。 可以將行發送到客戶端,也可以不發送。
保留前一個語句執行中的 @@ROWCOUNT。
將 @@ROWCOUNT 重置為 0 但不將該值返回到客戶端。
執行簡單分配的語句始終將 @@ROWCOUNT 值設置為 1。 不將任何行發送到客戶端。 這些語句的示例如下:SET @local_variable、RETURN、READTEXT 以及不帶查詢的 Select 語句,如 SELECT GETDATE() 或 SELECT 'Generic Text'。
在查詢中進行分配或使用 RETURN 的語句將 @@ROWCOUNT 值設置為受查詢影響的行數或查詢讀取的行數,例如:SELECT @local_variable = c1 FROM t1。
數據操作語言 (DML) 語句將 @@ROWCOUNT 值設置為受查詢影響的行數,並將該值返回到客戶端。 DML 語句不會將任何行發送到客戶端。
DECLARE CURSOR 和 FETCH 將 @@ROWCOUNT 值設置為 1。
EXECUTE 語句保留前一個 @@ROWCOUNT。
USE、SET <option>、DEALLOCATE CURSOR、CLOSE CURSOR、BEGIN TRANSACTION 或 COMMIT TRANSACTION 等語句將 ROWCOUNT 值重置為 0。
以下示例執行 UPDATE 語句並使用 @@ROWCOUNT 來檢測是否更改了任何一些行。
USE AdventureWorks2012; GO UPDATE HumanResources.Employee SET JobTitle = N'Executive' WHERE NationalIDNumber = 123456789 IF @@ROWCOUNT = 0 PRINT 'Warning: No rows were updated'; GO
返回上一語句受影響的行數!和@ERROR一樣的特性,在每一條語句執行后都將被重置,如果將來使用需要將變量保存到局部變量中。任何不返回的語句都將這個變量置為0!比如經常使用的IF語句。廢話少說,上代碼!DECLARE @RowCountVar INTUpdate AF_CarOil SET OilType = '五號汽油'-- 執行后@@ROWCOUNT為2SET @RowCountVar = @@ROWCOUNT --執行后@@ROWCOUNT為1IF @@ROWCOUNT = 1 --執行后@@ROWCOUNT為0BEGINPRINT '影響的行數為1'PRINT @@ROWCOUNTENDIF @RowCountVar <> 0BEGINPRINT '受影響的行數為:' + STR(@RowCountVar)END-----------------------------------------------------------------(2 行受影響)影響的行數為 10受影響的行數為: 2分析: 上面的代碼中在執行Update語句之后,受影響的行數為2行,然后將受影響的行數保存到事先聲明的局部變量中,賦值語句實際上影響的行數為1行,在下面的IF語句中進行了跳轉,這個地方是關鍵,這並不是Update語句受影響的行數是1,而是將@@ROWCOUNT將的賦給局部變量的過程中變成了1。在執行后IF @@ROWCOUNT = 1的判斷之后@@ROWCOUNT的數值重新被賦值為了0!