Begrenzen von Resultsets mit TOP und PERCENT
Mithilfe der TOP-Klausel können Sie die Anzahl der Zeilen beschränken, die im Resultset zurückgegeben werden.
TOP ( expression ) [ PERCENT ] [ WITH TIES ]
expression ist ein numerischer Ausdruck, der die Anzahl der zurückzugebenden Zeilen angibt; oder wenn PERCENT angegeben ist, wird der Prozentsatz (angegeben durch expression) der Zeilen des Resultsets zurückgegeben. Beispiel:
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 */.
Wenn eine SELECT-Anweisung, die TOP enthält, auch eine ORDER BY-Klausel hat, werden die zurückzugebenden Zeilen aus dem sortierten Resultset ausgewählt. Das gesamte Resultset wird in der angegebenen Reihenfolge erstellt, und die ersten n Zeilen des sortierten Resultsets werden zurückgegeben. Wenn auch WITH TIES angegeben ist, werden auch alle Zeilen zurückgegeben, die den letzten von der ORDER BY-Klausel zurückgegebenen Wert enthalten, selbst wenn damit die durch expression angegebene Anzahl überschritten wird.
TOP oder SET ROWCOUNT
Die andere Methode, die Größe eines Resultsets zu begrenzen, ist das Ausführen von SET ROWCOUNT n vor der Ausführung einer Anweisung. SET ROWCOUNT unterscheidet sich folgendermaßen von TOP:
Die TOP-Klausel gilt nur für die SELECT-Anweisung, in der sie angegeben wurde. SET ROWCOUNT bleibt in Kraft, bis eine andere SET ROWCOUNT-Anweisung, z. B. SET ROWCOUNT 0 zum Deaktivieren der Option, ausgeführt wird.
Wichtig Das Verwenden von SET ROWCOUNT wird in der nächsten Version von SQL Server keine Auswirkungen auf die DELETE-, INSERT- und UPDATE-Anweisungen haben. Vermeiden Sie beim Entwickeln neuer Anwendungen das Verwenden von SET ROWCOUNT zusammen mit DELETE-, INSERT- und UPDATE-Anweisungen, und planen Sie die Änderung von Anwendungen, in denen dies zurzeit verwendet wird. Es wird empfohlen, DELETE-, INSERT- und UPDATE-Anweisungen, die zurzeit SET ROWCOUNT verwenden, mithilfe von TOP neu zu schreiben.
Obwohl die Auswirkung von SET ROWCOUNT auf SELECT-Anweisungen unverändert bleibt, wird die Verwendung von TOP mit SELECT aus folgenden Gründen der Verwendung von SET ROWCOUNT vorgezogen:
SET ROWCOUNT veranlasst die meisten SELECT-, INSERT-, UPDATE- und DELETE-Anweisungen, die Verarbeitung zu beenden, wenn die angegebene Anzahl von Zeilen bearbeitet wurde. Dieses Verhalten gilt auch innerhalb der Auslösung von Triggern.
Als Bestandteil einer SELECT-Anweisung kann der Abfrageoptimierer den Wert von expression in der TOP-Klausel als Bestandteil der Erzeugung eines Ausführungsplans für eine Abfrage verwenden. Da SET ROWCOUNT außerhalb einer Anweisung verwendet wird, die eine Abfrage ausführt, kann ihr Wert nicht zum Erzeugen eines Ausführungsplans für eine Abfrage verwendet werden.