SQL裡ROWCOUNT的使用

來源:互聯網
上載者:User

一直不學無術,所以也就一直懵懵懂懂。

 

之前有朋友問起以下代碼怎麼不行:

 

declare @rowcount int;
set @rowcount = 10;
select top @rowcount * from table

 

這個是因為,TOP 只接受常量做數量參數,而不能接受變數,給對方提供的解決方案是:

 

declare @sql nvarchar(4000);
set @sql = 'select top ' + convert(varchar(10), @rowcount) + ' * from table'

exec(@sql)

 

剛在博問裡,人問起 rowcount 的用法,查了下,文檔裡是這樣說的:

 

 

使 SQL Server 在返回指定的行數之後停止處理查詢。

Transact-SQL 文法約定

文法
SET ROWCOUNT { number | @number_var } 

參數

number | @ number_var

在停止特定查詢之前要處理的行數(整數)。

注釋
重要提示:
在 SQL Server 的下一個版本中,使用 SET ROWCOUNT 將不會影響 DELETE、INSERT 和 UPDATE 語句。請不要在新的開發工作中將 SET ROWCOUNT 與 DELETE、INSERT 和 UPDATE 語句一起使用,並應準備修改當前使用它的應用程式。另外,對於當前使用 SET ROWCOUNT 的 DELETE、INSERT 和 UPDATE 語句,建議您使用 TOP 文法重寫它們。有關詳細資料,請參閱 DELETE (Transact-SQL)、INSERT (Transact-SQL) 或 UPDATE (Transact-SQL)。

對於在遠端資料表和本地及遠端資料分割視圖上執行的 INSERT、UPDATE 和 DELETE 語句,將忽略 SET ROWCOUNT 選項設定。

要將此選項設定為 off 以便返回所有的行,請將 SET ROWCOUNT 指定為 0。

注意:
設定 SET ROWCOUNT 選項將使大多數 Transact-SQL 陳述式在受到指定數目的行影響後停止處理。這包括觸發器和 INSERT、UPDATE 及 DELETE 等資料修改語句。ROWCOUNT 選項對動態資料指標無效,但它可以限制鍵集的行集和不區分遊標。應謹慎使用該選項,它主要與 SELECT 語句一起使用。

如果行數值較小,則 SET ROWCOUNT 將覆蓋 SELECT 語句 TOP 關鍵字。

當 INSERT、UPDATE 和 DELETE 語句使用顯式 TOP 運算式時,這些語句將忽略 SET ROWCOUNT。這包括 INSERT 後跟 SELECT 子句的語句。

SET ROWCOUNT 的設定是在執行時或運行時設定,而不是在分析時設定。

許可權

要求具有 public 角色的成員資格。

樣本

SET ROWCOUNT 在達到指定的行數後停止處理。請注意,在下面的樣本中共有 545 行滿足 Quantity 小於 300 的條件。但是,從更新後返回的行數可以看出並非所有行都得到了處理。ROWCOUNT 影響所有的 Transact-SQL 陳述式。


複製代碼
USE AdventureWorks2008R2; GO SELECT count(*) AS Count FROM Production.ProductInventory WHERE Quantity < 300; GO

下面是結果集:

Count

-----------

537

(1 row(s) affected)

現在,將 ROWCOUNT 設定為 4,並以 Quantity 小於 300 的條件更新所有行。


複製代碼
SET ROWCOUNT 4; UPDATE Production.ProductInventory SET Quantity = 400 WHERE Quantity < 300; GO

(4 row(s) affected)

 

於是醍醐灌頂,對朋友的問題得出新的解決方案:

 

 

declare @rowcount int;
set @rowcount = 1;
set rowcount @rowcount

SELECT * FROM table

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.