Share via


使用 TOP 與 PERCENT 限制結果集

您可以使用 TOP 子句來限制在結果集傳回的資料列數。

TOP ( expression ) [ PERCENT ] [ WITH TIES ]

expression 是數值運算式,它指定要傳回的資料列數;若指定 PERCENT,則會傳回結果集資料列的百分比 (此百分比由 expression 指定)。例如:

TOP (120) /*Return the top 120 rows of the result set. */
TOP (15) PERCENT /* Return the top 15 percent of the result set. */.
TOP(@n) /* Return the top @n rows of the result set, with the variable declaration: DECLARE @n AS BIGINT; SET @n = 2 */.

如果包含 TOP 的 SELECT 陳述式也有 ORDER BY 子句,傳回的資料列便從已排序的結果集來選取。整個結果集會依指定的順序建立,並且傳回已排序之結果集的前 n 個資料列。如果同時指定了 WITH TIES,則包含 ORDER BY 子句所傳回最後值的所有資料列都會被傳回,不過這樣可能會超出 expression 指定的數目。

TOP 與 SET ROWCOUNT 的比較

限制結果集大小的另一種方法是在執行陳述式之前,先執行 SET ROWCOUNT n 陳述式。SET ROWCOUNT 與 TOP 的差異如下:

  • TOP 子句僅適用於指定它的單一 SELECT 陳述式中。SET ROWCOUNT 則會維持有效,直到執行另一個 SET ROWCOUNT 陳述式為止,例如會將此選項關閉的 SET ROWCOUNT 0。

    重要事項重要事項

    使用 SET ROWCOUNT 並不會影響 SQL Server 下一版的 DELETE、INSERT 和 UPDATE 陳述式。請避免在新的開發工作中使用 SET ROWCOUNT 搭配 DELETE、INSERT 和 UPDATE 陳述式,並計畫修改目前正在使用它的應用程式。我們建議將目前使用 SET ROWCOUNT 的 DELETE、INSERT 和 UPDATE 陳述式,都重寫為改用 TOP。

    雖然 SET ROWCOUNT 在 SELECT 陳述式上的作用不變,但基於下列原因,請使用 TOP 與 SELECT,而不要使用 SET ROWCOUNT:

    • SET ROWCOUNT 會在影響了指定的資料列數後,造成大部分的 SELECT、INSERT、UPDATE 和 DELETE 陳述式停止處理。此行為也會發生在觸發程序的引發中。

    • 查詢最佳化工具可在 SELECT 陳述式中,使用 TOP 子句的 expression 值,來為查詢產生執行計畫。而因為 SET ROWCOUNT 是在執行查詢的陳述式之外使用,所以它的值不能用來為查詢產生查詢計畫。