TOP (Transact-SQL)

Aktualisiert: 17. November 2008

Gibt an, dass nur der erste Satz Zeilen aus dem Abfrageergebnis zurückgegeben wird. Bei dem Satz Zeilen kann es sich um eine Anzahl oder einen Prozentsatz der Zeilen handeln. Der TOP-Ausdruck kann in SELECT-, INSERT-, UPDATE- und DELETE-Anweisungen verwendet werden.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

[ 
     TOP (expression) [PERCENT]
     [ WITH TIES ]
]

Argumente

  • expression
    Der numerische Ausdruck, der angibt, dass eine Anzahl von Zeilen zurückgegeben wird. expression wird implizit in einen float-Wert konvertiert, wenn PERCENT angegeben ist. Andernfalls wird der Ausdruck in bigint konvertiert.

    Klammern zur Begrenzung von expression in TOP sind in INSERT-, UPDATE- und DELETE-Anweisungen erforderlich. Zum Sicherstellen der Abwärtskompatibilität wird die Verwendung von TOP expression ohne Klammern in SELECT-Anweisungen unterstützt, jedoch nicht empfohlen.

    Wenn die Abfrage eine ORDER BY-Klausel enthält, werden die ersten expression Zeilen (oder expression Prozent der Zeilen) der von der ORDER BY-Klausel sortierten Zeilen zurückgegeben. Falls die Abfrage keine ORDER BY-Klausel enthält, ist die Reihenfolge der Zeilen beliebig.

  • PERCENT
    Gibt an, dass die Abfrage nur die ersten expression Prozent der Zeilen aus dem Resultset zurückgibt.
  • WITH TIES
    Gibt an, dass weitere Zeilen vom Basisresultset mit den gleichen Werten in den ORDER BY-Spalten zurückgegeben werden sollen wie in den letzten der TOP n (PERCENT) Zeilen. TOP...WITH TIES kann nur in SELECT-Anweisungen angegeben werden und nur dann, wenn eine ORDER BY-Klausel angegeben wurde.

    ms189463.note(de-de,SQL.90).gifHinweis:
    Die zurückgegebene Reihenfolge beim Binden von Datensätzen ist willkürlich. SORT BY wirkt sich nicht auf diese Regel aus.

Hinweise

TOP kann nicht zusammen mit UPDATE- und DELETE-Anweisungen für partitionierte Sichten verwendet werden.

Die Zeilen, auf die im TOP-Ausdruck mit INSERT, UPDATE oder DELETE verwiesen wird, haben keine bestimmte Reihenfolge. TOP n gibt n zufällige Zeilen zurück. Die folgende INSERT-Anweisung enthält beispielsweise die ORDER BY-Klausel, diese wirkt sich jedoch nicht auf die Zeilen aus, auf die von der INSERT-Anweisung direkt verwiesen wird.

INSERT TOP (2) INTO Table2 (ColumnB) 
     SELECT ColumnA FROM Table1 
     ORDER BY ColumnA

Die ORDER BY-Klausel in der vorherigen Abfrage verweist nur auf die Zeilen, die von der geschachtelten SELECT-Anweisung zurückgegeben werden. Die INSERT-Anweisung wählt zwei beliebige Zeilen aus, die von der SELECT-Anweisung zurückgegeben werden. Um sicherzustellen, dass die beiden obersten Zeilen aus der SELECT-Unterabfrage eingefügt werden, schreiben Sie die Abfrage wie folgt neu.

INSERT INTO Table2 (ColumnB) 
     SELECT TOP (2) ColumnA FROM Table1 
     ORDER BY ColumnA

Microsoft SQL Server 2005 ermöglicht das Aktualisieren von Sichten, die mit der TOP-Klausel erstellt wurden. Da die TOP-Klausel in der Sichtdefinition enthalten ist, können bestimmte Zeilen bei einer Aktualisierung u. U. verschwinden, falls das Ergebnis nicht länger die Anforderungen des TOP-Ausdrucks erfüllt. Weitere Informationen finden Sie unter Ändern von Daten über eine Sicht.

Der TOP-Ausdruck in einer Abfrage wirkt sich nicht auf Anweisungen aus, die möglicherweise wegen eines ausgelösten Triggers ausgeführt werden. Die eingefügten und aktualisierten Tabellen in den Triggern zeigen nur die Zeilen an, die von den INSERT-, UPDATE- oder DELETE-Anweisungen tatsächlich betroffen sind.

Beispiele

A. Verwenden von TOP mit Variablen

Im folgenden Beispiel wird eine Variable verwendet, um die ersten 10 Mitarbeiter abzurufen, die in der dbo.Employee-Tabelle der AdventureWorks-Datenbank aufgelistet sind.

USE AdventureWorks ;
GO
DECLARE @p AS int
SET @p='10'
SELECT TOP(@p)*
FROM HumanResources.Employee;
GO

B. Verwenden von TOP mit PERCENT und WITH TIES

Im folgenden Beispiel werden die obersten 10 Prozent aller Mitarbeiter mit dem höchsten Gehalt abgerufen und in absteigender Reihenfolge nach der Höhe des Grundgehalts zurückgegeben. Durch Angeben von WITH TIES wird sichergestellt, dass alle Mitarbeiter mit einem Gehalt, das dem niedrigsten zurückgegebenen Gehalt entspricht, ebenfalls im Resultset enthalten sind, auch wenn dadurch 10 Prozent der Mitarbeiter überschritten werden.

USE AdventureWorks ;
GO
SELECT TOP(10) PERCENT WITH TIES
c.FirstName, c.LastName, e.Title, e.Gender, r.Rate
FROM Person.Contact c 
INNER JOIN HumanResources.Employee e
ON c.ContactID = e.ContactID
INNER JOIN HumanResources.EmployeePayHistory r
ON r.EmployeeID = e.EmployeeID
ORDER BY Rate DESC;

Siehe auch

Verweis

SELECT (Transact-SQL)
INSERT (Transact-SQL)
UPDATE (Transact-SQL)
DELETE (Transact-SQL)

Hilfe und Informationen

Informationsquellen für SQL Server 2005

Änderungsverlauf

Version Verlauf

17. November 2008

Geänderter Inhalt:
  • Der WITH TIES-Argumentbeschreibung wurde der Hinweis hinzugefügt.

05. Dezember 2005

Geänderter Inhalt:
  • Beispiel B wurde aktualisiert.