關於SQL SERVER的ROWCOUNT關鍵字

來源:互聯網
上載者:User

因為仰望ORACLE,所以一直都以為SQL SERVER很笨。

據傳SQL 2005有了RowID的東西,可以解決TOP排序的問題。可惜還沒有機會體驗。在SQL 2000中寫預存程序,總會遇到需要TOP的地方,而一旦遇到TOP,因為沒辦法把TOP後面的數字作為變數寫到先行編譯的語句中去,所以只能夠使用構造SQL,使用Exec來執行。不說效率的問題,心裡也總覺得這個辦法很笨。

實際上,在SQL 2000中完全可以使用ROWCOUNT關鍵字解決這個問題。

ROWCOUNT關鍵字的用法在線上說明中有比較詳細的說明,這兒就不羅嗦了。談談體會。

1、使用ROWCOUNT查詢前幾行結果。

DECLARE @n INT
SET @n = 1000
SET ROWCOUNT @n
SELECT * FROM Table_1
 

 這樣,查詢結果將等同於

SELECT TOP 100 FROM Table_1

2、同樣的道理,使用INSERT INTO..SELECT的時候也有效。

DECLARE @n INT
SET @n = 1000
SET ROWCOUNT @n
INSERT INTO Table_2 (colname1)
SELECT colname1=colname2 FROM Table_1

執行的結果將等同於

INSERT INTO Table_2(colname1)
SELECT TOP 1000 colname1 = colname2 FROM Table_1

3、執行UPDATE和DELETE。

因為UPDATE和DELETE無法直接使用ORDER BY文法,如果使用ROWCOUNT,將按照主鍵順序從前往後操作。

DECLARE @n INT
SET @n = 1000
SET ROWCOUNT @n
DELETE FROM Table_1

不過也有解決辦法,只要能夠使用ORDER BY關鍵字就可以了,比如說直接用含ORDER BY的子句,或者先使用ORDER BY文法把需要操作的識別欄位存為一個暫存資料表或表變數,然後再動作陳述式中使用IN或EXISTS關鍵字。

DECLARE @n INT
SET @n = 1000
SET ROWCOUNT @n
DECLARE @t TABLE(ID INT)
INSERT INTO @t
SELECT ID FROM Table_1 ORDER BY colname [ASC/DESC]

DELETE FROM  Table_1 WHERE ID IN (SELECT ID FROM @t)

4、對於ROWCOUNT的設定是與Session有關的。如果佔用了一個Session,那麼對應的這個資料庫Session將使用最近一次設定的ROWCOUNT,直到Session結束或者修改了ROWCOUNT。

 

5、在使用者自訂函數中不能使用ROWCOUNT。

6、取消ROWCOUNT。

我不知道為什麼在線上說明中說,寫預存程序的時候應該注意盡量避免使用ROWCOUNT,而建議使用TOP。難道MS不知道TOP關鍵後面的數字不能為變數嗎?也許MS是出於擔心開發人員忘記了取消ROWCOUNT而影響正常的實現。

使用這樣的語句即可取消ROWCOUNT了。

SET ROWCOUNT 0

8、總結

使用ROWCOUNT之後可以很方便的解決TOP關鍵字不能帶變數的問題,這樣,對於需要排序取值的問題就比較容易解決了。避免了使用EXEC來執行構造SQL語句,調試預存程序的時候也要方便很多。唯一不方便的是,沒有找到擷取當前ROWCOUNT值的辦法,但仔細想來,得到這個值的用處也並不大。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.