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.
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.Hinweis: 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 |
|
05. Dezember 2005 |
|