TOP (Transact-SQL)TOP (Transact-SQL)

GILT FÜR: JaSQL Server JaAzure SQL-Datenbank JaAzure Synapse Analytics (SQL DW) JaParallel Data Warehouse APPLIES TO: YesSQL Server YesAzure SQL Database YesAzure Synapse Analytics (SQL DW) YesParallel Data Warehouse

Begrenzt die zurückgegebenen Zeilen in einem Abfrageresultset auf die in SQL Server 2019 (15.x)SQL Server 2019 (15.x) angegebene Anzahl bzw. den darin angegebenen diesbezüglichen Prozentwert.Limits the rows returned in a query result set to a specified number of rows or percentage of rows in SQL Server 2019 (15.x)SQL Server 2019 (15.x). Wenn TOP in Verbindung mit der ORDER BY-Klausel verwendet wird, ist das Resultset auf die ersten N sortierten Zeilen beschränkt.When you use TOP with the ORDER BY clause, the result set is limited to the first N number of ordered rows. Andernfalls gibt TOP die ersten N Zeilen in zufälliger Reihenfolge zurück.Otherwise, TOP returns the first N number of rows in an undefined order. Verwenden Sie diese Klausel, um die Anzahl der von einer SELECT-Anweisung zurückgegebenen Zeilen anzugeben.Use this clause to specify the number of rows returned from a SELECT statement. Oder verwenden Sie TOP, um die Zeilen anzugeben, die von einer INSERT-, UPDATE-, MERGE- oder DELETE-Anweisung betroffen sind.Or, use TOP to specify the rows affected by an INSERT, UPDATE, MERGE, or DELETE statement.

Symbol für Themenlink Transact-SQL-SyntaxkonventionenTopic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

Die folgende Syntax gilt für SQL Server und Azure SQL-Datenbank:Following is the syntax for SQL Server and Azure SQL Database:

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

Die folgende Syntax gilt für Azure SQL Data Warehouse und Parallel Data Warehouse:Following is syntax for Azure SQL Data Warehouse and Parallel Data Warehouse:

[   
    TOP ( expression )   
    [ WITH TIES ]  
]  

ArgumenteArguments

expressionexpression
Der numerische Ausdruck, der die Anzahl der zurückzugebenden Zeilen angibt.The numeric expression that specifies the number of rows to be returned. expression wird implizit in einen float-Wert konvertiert, wenn PERCENT angegeben ist.expression is implicitly converted to a float value if you specify PERCENT. Andernfalls wird expression in bigint konvertiert.Otherwise, expression is converted to bigint.

PERCENTPERCENT
Gibt an, dass die Abfrage nur die ersten expression Prozent der Zeilen aus dem Resultset zurückgibt.Indicates that the query returns only the first expression percent of rows from the result set. Bruchwerte werden auf den nächsten ganzzahligen Wert aufgerundet.Fractional values are rounded up to the next integer value.

WITH TIESWITH TIES
Gibt mindestens zwei Zeilen zurück, die zeitgleich den letzten Platz im beschränkten Resultset belegen.Returns two or more rows that tie for last place in the limited results set. Sie müssen dieses Argument mit der ORDER BY-Klausel verwenden.You must use this argument with the ORDER BY clause. Durch WITH TIES werden möglicherweise mehr Zeilen zurückgegeben, als der Wert in expression angibt.WITH TIES might cause more rows to be returned than the value specified in expression. Wenn beispielsweise expression auf den Wert „5“ festgelegt ist, aber zwei weitere Zeilen den Werten der ORDER BY-Spalten in Zeile 5 entsprechen, enthält das Resultset sieben Zeilen.For example, if expression is set to 5 but two additional rows match the values of the ORDER BY columns in row 5, the result set will contain seven rows.

Sie können die TOP-Klausel mit dem WITH TIES-Argument nur in SELECT-Anweisungen und nur dann angeben, wenn Sie auch die ORDER BY-Klausel angegeben haben.You can specify the TOP clause with the WITH TIES argument only in SELECT statements, and only if you've also specified the ORDER BY clause. Die zurückgegebene Reihenfolge beim Binden von Datensätzen ist willkürlich.The returned order of tying records is arbitrary. ORDER BY wirkt sich nicht auf diese Regel aus.ORDER BY doesn't affect this rule.

Bewährte MethodenBest Practices

Verwenden Sie in einer SELECT-Anweisung immer eine ORDER BY-Klausel mit einer TOP-Klausel.In a SELECT statement, always use an ORDER BY clause with the TOP clause. Denn dies ist die einzige Möglichkeit, zuverlässig anzugeben, welche Zeilen von TOP betroffen sind.Because, it's the only way to predictably indicate which rows are affected by TOP.

Verwenden Sie OFFSET und FETCH in der ORDER BY-Klausel anstelle der TOP-Klausel, um eine Abfrageauslagerung zu implementieren.Use OFFSET and FETCH in the ORDER BY clause instead of the TOP clause to implement a query paging solution. Eine Abfrageauslagerung (d. h. das Senden von Abschnitten oder "Seiten" von Daten an den Client) kann leichter mit OFFSET- und FETCH-Klauseln implementiert werden.A paging solution (that is, sending chunks or "pages" of data to the client) is easier to implement using OFFSET and FETCH clauses. Weitere Informationen finden Sie unter ORDER BY-Klausel (Transact-SQL).For more information, see ORDER BY Clause (Transact-SQL).

Schränken Sie die Anzahl der zurückgegebenen Zeilen mithilfe von TOP (oder OFFSET und FETCH) anstelle von SET ROWCOUNT ein.Use TOP (or OFFSET and FETCH) instead of SET ROWCOUNT to limit the number of rows returned. Diese Methoden werden SET ROWCOUNT aus folgenden Gründen vorgezogen:These methods are preferred over using SET ROWCOUNT for the following reasons:

  • Im Rahmen einer SELECT-Anweisung kann der Wert von expression in der TOP- oder der FETCH-Klausel vom Abfrageoptimierer während der Abfrageoptimierung berücksichtigt werden.As a part of a SELECT statement, the query optimizer can consider the value of expression in the TOP or FETCH clauses during query optimization. Da SET ROWCOUNT außerhalb einer Anweisung verwendet wird, die eine Abfrage ausführt, kann ihr Wert nicht in einem Abfrageplan berücksichtigt werden.Because you use SET ROWCOUNT outside of a statement that runs a query, its value can't be considered in a query plan.

KompatibilitätsunterstützungCompatibility Support

Aus Gründen der Abwärtskompatibilität sind die Klammern in SELECT-Anweisungen optional.For backward compatibility, the parentheses are optional in SELECT statements. Es empfiehlt sich, in SELECT-Anweisungen immer Klammern für TOP zu verwenden.We recommend that you always use parentheses for TOP in SELECT statements. Damit erzielen Sie Konsistenz mit der erforderlichen Verwendung in INSERT-, UPDATE-, MERGE- und DELETE-Anweisungen.Doing so provides consistency with its required use in INSERT, UPDATE, MERGE, and DELETE statements.

InteroperabilitätInteroperability

Der TOP-Ausdruck wirkt sich nicht auf Anweisungen aus, die möglicherweise wegen eines Triggers ausgeführt werden.The TOP expression doesn't affect statements that might run because of a trigger. Die Tabellen inserted und deleted in den Triggern geben nur die Zeilen zurück, die tatsächlich von den INSERT-, UPDATE- MERGE- oder DELETE-Anweisungen betroffen sind.The inserted and deleted tables in the triggers return only the rows that are truly affected by the INSERT, UPDATE, MERGE, or DELETE statements. Beispiel: Ein INSERT TRIGGER, der aufgrund einer INSERT-Anweisung mit einer TOP-Klausel ausgelöst wird.For example, if an INSERT TRIGGER fires as the result of an INSERT statement that used a TOP clause.

SQL ServerSQL Server ermöglicht das Aktualisieren von Zeilen über Sichten.allows for updating rows through views. Weil die TOP-Klausel in die Sichtdefinition einbezogen werden kann, werden bestimmte Zeilen aufgrund eines Updates möglicherweise nicht mehr in der Sicht angezeigt, wenn die Zeilen die Anforderungen des TOP-Ausdrucks nicht mehr erfüllen.Because you can include the TOP clause in the view definition, certain rows may disappear from the view if the rows no longer meet the requirements of the TOP expression due to an update.

Bei Angabe in der MERGE-Anweisung wird die TOP-Klausel angewendet, nachdem die gesamte Quelltabelle und die gesamte Zieltabelle verknüpft wurden.When specified in the MERGE statement, the TOP clause applies after the entire source table and the entire target table are joined. Und die verknüpften Zeilen, die nicht für eine INSERT-, UPDATE- oder DELETE-Aktion infrage kommen, werden entfernt.And, the joined rows that don't qualify for an insert, update, or delete action are removed. Die TOP-Klausel verringert zudem die Anzahl der verknüpften Zeilen auf den angegebenen Wert, und die INSERT-, UPDATE- oder DELETE-Aktionen werden ungeordnet auf die verbliebenen verknüpften Zeilen angewendet.The TOP clause further reduces the number of joined rows to the specified value and the insert, update, or delete actions apply to the remaining joined rows in an unordered way. Dies bedeutet, dass für die Verteilung der Zeilen auf die in den WHEN-Klauseln definierten Aktionen keine bestimmte Reihenfolge gilt.That is, there's no order in which the rows are distributed among the actions defined in the WHEN clauses. Wenn beispielsweise die Angabe von „TOP (10)“ 10 Zeilen betrifft, werden sieben davon aktualisiert und drei eingefügt.For example, if specifying TOP (10) affects 10 rows, of these rows, seven may be updated and three inserted. Möglicherweise werden auch fünf Zeilen aktualisiert, vier eingefügt und eine gelöscht usw.Or, one may be deleted, five updated, and four inserted, and so on. Da die MERGE-Anweisung einen vollständigen Tabellenscan der Quell- und der Zieltabelle ausführt, kann die E/A-Leistung beeinträchtigt werden, wenn Sie mit der TOP-Klausel eine große Tabelle durch Erstellen mehrerer Batches ändern.Because the MERGE statement does a full table scan of both the source and target tables, I/O performance can be affected when you use the TOP clause to modify a large table by creating multiple batches. In diesem Szenario muss unbedingt sichergestellt werden, dass alle aufeinanderfolgenden Batches auf neue Zeilen ausgerichtet sind.In this scenario, it's important to ensure that all successive batches target new rows.

Geben Sie die TOP-Klausel in einer Abfrage mit einem UNION-, UNION ALL-, EXCEPT- oder INTERSECT-Operator mit Bedacht an.Use caution when you're specifying the TOP clause in a query that contains a UNION, UNION ALL, EXCEPT, or INTERSECT operator. Es ist denkbar, dass eine Abfrage geschrieben wird, die unerwartete Ergebnisse zurückgibt, weil die Reihenfolge der logischen Verarbeitung für die TOP-Klausel und die ORDER BY-Klausel nicht immer intuitiv ist, wenn diese Operatoren in einem SELECT-Vorgang verwendet werden.It's possible to write a query that returns unexpected results because the order in which the TOP and ORDER BY clauses are logically processed isn't always intuitive when these operators are used in a select operation. Beispiel: Für die folgende Tabelle und die darin enthaltenen Daten sollen das günstigste rote Auto sowie das günstigste blaue Auto zurückgeben werden.For example, given the following table and data, assume that you want to return the least expensive red car and the least expensive blue car. Dies sind der rote PKW und der blaue LKW.That is, the red sedan and the blue van.

CREATE TABLE dbo.Cars(Model varchar(15), Price money, Color varchar(10));  
INSERT dbo.Cars VALUES  
    ('sedan', 10000, 'red'), ('convertible', 15000, 'blue'),   
    ('coupe', 20000, 'red'), ('van', 8000, 'blue');  

Um diese Ergebnisse zu erreichen, können Sie die folgende Abfrage schreiben:To achieve these results, you might write the following query.

SELECT TOP(1) Model, Color, Price  
FROM dbo.Cars  
WHERE Color = 'red'  
UNION ALL  
SELECT TOP(1) Model, Color, Price  
FROM dbo.Cars  
WHERE Color = 'blue'  
ORDER BY Price ASC;  
GO    

Nachfolgend ist das Resultset dargestellt.Following is the result set.

Model         Color      Price  
------------- ---------- -------  
sedan         red        10000.00  
convertible   blue       15000.00

Die unerwarteten Ergebnisse werden zurückgegeben, weil die logische Ausführung der TOP-Klausel vor der logischen Ausführung der ORDER BY-Klausel erfolgt, mit der die Ergebnisse des Operators (in diesem Fall UNION ALL) sortiert werden.The unexpected results are returned because the TOP clause logically runs before the ORDER BY clause, which sorts the results of the operator (UNION ALL in this case). So werden von der vorherigen Abfrage ein beliebiges rotes und ein beliebiges blaues Auto zurückgegeben, und dann wird das Ergebnis dieser Union nach dem Preis sortiert.So, the previous query returns any one red car and any one blue car and then orders the result of that union by the price. Im folgenden Beispiel wird veranschaulicht, wie eine Abfrage geschrieben wird, um das gewünschte Ergebnis zu erzielen.The following example shows the correct method of writing this query to achieve the desired result.

SELECT Model, Color, Price  
FROM (SELECT TOP(1) Model, Color, Price  
      FROM dbo.Cars  
      WHERE Color = 'red'  
      ORDER BY Price ASC) AS a  
UNION ALL  
SELECT Model, Color, Price  
FROM (SELECT TOP(1) Model, Color, Price  
      FROM dbo.Cars  
      WHERE Color = 'blue'  
      ORDER BY Price ASC) AS b;  
GO    

Durch die Verwendung von TOP und ORDER BY in einem untergeordneten SELECT-Vorgang stellen Sie sicher, dass die Ergebnisse der ORDER BY-Klausel auf die TOP-Klausel angewendet werden und damit nicht das Ergebnis des UNION-Vorgangs sortiert wird.By using TOP and ORDER BY in a subselect operation, you ensure that the results of the ORDER BY clause are applied to the TOP clause and not to sorting the result of the UNION operation.

Hier ist das Resultset.Here is the result set.

Model         Color      Price  
------------- ---------- -------  
sedan         red        10000.00  
van           blue        8000.00

EinschränkungenLimitations and Restrictions

Wenn Sie TOP mit INSERT, UPDATE, MERGE oder DELETE verwenden, werden die referenzierten Zeilen in keiner bestimmten Reihenfolge angeordnet.When you use TOP with INSERT, UPDATE, MERGE, or DELETE, the referenced rows aren't arranged in any order. Und Sie können die ORDER BY-Klausel nicht direkt in diesen Anweisungen angeben.And, you can't directly specify the ORDER BY clause in these statements. Wenn Sie die TOP-Klausel verwenden müssen, um Zeilen in einer sinnvollen Reihenfolge einzufügen, zu löschen oder zu bearbeiten, verwenden Sie TOP mit einer ORDER BY-Klausel in einer untergeordneten SELECT-Anweisung.If you need to use TOP to insert, delete, or modify rows in a meaningful chronological order, use TOP with an ORDER BY clause specified in a subselect statement. Beachten Sie in diesem Zusammenhang den folgenden Abschnitt „Beispiele“ in diesem Artikel.See the following Examples section in this article.

TOP kann nicht in UPDATE- und DELETE-Anweisungen für partitionierte Sichten verwendet werden.You can't use TOP in an UPDATE and DELETE statements on partitioned views.

TOP kann nicht mit OFFSET und FETCH im gleichen Abfrageausdruck (im gleichen Abfragebereich) kombiniert werden.You can't combine TOP with OFFSET and FETCH in the same query expression (in the same query scope). Weitere Informationen finden Sie unter ORDER BY-Klausel (Transact-SQL).For more information, see ORDER BY Clause (Transact-SQL).

BeispieleExamples

CategoryCategory FunktionssyntaxelementeFeatured syntax elements
Grundlegende SyntaxBasic syntax TOP • PERCENTTOP • PERCENT
Einschließen von gleichwertigen WertenIncluding tie values WITH TIESWITH TIES
Beschränken der von DELETE, INSERT oder UPDATE betroffenen ZeilenLimiting the rows affected by DELETE, INSERT, or UPDATE DELETE • INSERT • UPDATEDELETE • INSERT • UPDATE

Grundlegende SyntaxBasic syntax

Anhand von Beispielen in diesem Abschnitt wird die grundlegende Funktion der ORDER BY-Klausel mithilfe der mindestens erforderlichen Syntax veranschaulicht.Examples in this section demonstrate the basic functionality of the ORDER BY clause using the minimum required syntax.

A.A. Verwenden von TOP mit einem konstanten WertUsing TOP with a constant value

In den folgenden Beispielen wird die Anzahl der Mitarbeiter, die in einem Abfrageresultset zurückgegeben werden, mit einem konstanten Wert angegeben.The following examples use a constant value to specify the number of employees that are returned in the query result set. Im ersten Beispiel werden die ersten 10 nicht definierten Zeilen zurückgegeben, weil keine ORDER BY-Klausel verwendet wird.In the first example, the first 10 undefined rows are returned because an ORDER BY clause isn't used. Im zweiten Beispiel wird eine ORDER BY-Klausel verwendet, um die ersten 10 Mitarbeiter zurückzugeben, die kürzlich eingestellt wurden.In the second example, an ORDER BY clause is used to return the top 10 recently hired employees.

USE AdventureWorks2012;  
GO  
-- Select the first 10 random employees.  
SELECT TOP(10)JobTitle, HireDate  
FROM HumanResources.Employee;  
GO  
-- Select the first 10 employees hired most recently.  
SELECT TOP(10)JobTitle, HireDate  
FROM HumanResources.Employee  
ORDER BY HireDate DESC;  
GO  

B.B. Verwenden von TOP mit einer VariablenUsing TOP with a variable

Im folgenden Beispiel wird die Anzahl der Mitarbeiter, die im Abfrageresultset zurückgegeben werden, mit einer Variablen angegeben.The following example uses a variable to specify the number of employees that are returned in the query result set.

USE AdventureWorks2012;  
GO  
DECLARE @p AS int = 10;  
SELECT TOP(@p)JobTitle, HireDate, VacationHours  
FROM HumanResources.Employee  
ORDER BY VacationHours DESC;  
GO  

C.C. Angeben eines ProzentsatzesSpecifying a percentage

Im folgenden Beispiel wird die Anzahl der Mitarbeiter, die im Abfrageresultset zurückgegeben werden, mit PERCENT angegeben.The following example uses PERCENT to specify the number of employees that are returned in the query result set. Die Tabelle HumanResources.Employee enthält 290 Mitarbeiter.There are 290 employees in the HumanResources.Employee table. Da fünf Prozent von 290 ein Dezimalstellenwert ist, wird der Wert auf die nächste ganze Zahl aufgerundet.Because five percent of 290 is a fractional value, the value is rounded up to the next whole number.

USE AdventureWorks2012;  
GO  
SELECT TOP(5)PERCENT JobTitle, HireDate  
FROM HumanResources.Employee  
ORDER BY HireDate DESC;  
GO    

Einschließen von gleichwertigen WertenIncluding tie values

A.A. Einschließen von Zeilen mit identischen Werten wie vorangehende Zeilen mit WITH TIESUsing WITH TIES to include rows that match the values in the last row

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 Gehalts zurückgegeben.The following example gets the top 10 percent of all employees with the highest salary and returns them in descending order according to their salary. Durch Angeben von WITH TIES wird sichergestellt, dass alle Mitarbeiter mit einem Gehalt, das dem niedrigsten zurückgegebenen Gehalt (der letzten Zeile) entspricht, ebenfalls im Resultset enthalten sind, auch wenn dadurch 10 Prozent der Mitarbeiter überschritten werden.Specifying WITH TIES ensures that employees with salaries equal to the lowest salary returned (the last row) are also included in the result set, even if it exceeds 10 percent of employees.

USE AdventureWorks2012;  
GO  
SELECT TOP(10) PERCENT WITH TIES  
pp.FirstName, pp.LastName, e.JobTitle, e.Gender, r.Rate  
FROM Person.Person AS pp   
    INNER JOIN HumanResources.Employee AS e  
        ON pp.BusinessEntityID = e.BusinessEntityID  
    INNER JOIN HumanResources.EmployeePayHistory AS r  
        ON r.BusinessEntityID = e.BusinessEntityID  
ORDER BY Rate DESC;  
GO    

Beschränken der von DELETE, INSERT oder UPDATE betroffenen ZeilenLimiting the rows affected by DELETE, INSERT, or UPDATE

A.A. Verwenden von TOP, um die Anzahl der zu löschenden Zeilen einzuschränkenUsing TOP to limit the number of rows deleted

Wenn Sie eine TOP (n)-Klausel mit DELETE verwenden, wird der Löschvorgang für eine nicht definierte Auswahl von n Zeilen ausgeführt.When you use a TOP (n) clause with DELETE, the delete operation is done on an undefined selection of n number of rows. Das heißt, die DELETE-Anweisung wählt eine beliebige Anzahl (n) von Zeilen aus, die die in der WHERE-Klausel definierten Kriterien erfüllen.That is, the DELETE statement chooses any (n) number of rows that meet the criteria defined in the WHERE clause. Im folgenden Beispiel werden 20 Zeilen mit einem Fälligkeitsdatum vor dem 1. Juli 2002 aus der Tabelle PurchaseOrderDetail gelöscht.The following example deletes 20 rows from the PurchaseOrderDetail table that have due dates earlier than July 1, 2002.

USE AdventureWorks2012;  
GO  
DELETE TOP (20)   
FROM Purchasing.PurchaseOrderDetail  
WHERE DueDate < '20020701';  
GO  

Wenn Sie die TOP-Klausel verwenden möchten, um Zeilen in einer sinnvollen Reihenfolge zu löschen, verwenden Sie TOP mit ORDER BY in einer untergeordneten SELECT-Anweisung.If you want to use TOP to delete rows in a meaningful chronological order, use TOP with ORDER BY in a subselect statement. Die folgende Abfrage löscht die zehn Zeilen der PurchaseOrderDetail -Tabelle mit den frühesten Fälligkeitsdaten.The following query deletes the 10 rows of the PurchaseOrderDetail table that have the earliest due dates. Die in der untergeordneten SELECT-Anweisung angegebene Spalte (PurchaseOrderID) ist der Primärschlüssel der Tabelle, um sicherzustellen, dass nur 10 Zeilen gelöscht werden.To ensure that only 10 rows are deleted, the column specified in the subselect statement (PurchaseOrderID) is the primary key of the table. Wird in der untergeordneten SELECT-Anweisung eine Nichtschlüsselspalte verwendet, werden möglicherweise mehr als 10 Zeilen gelöscht, wenn die angegebene Spalte doppelte Werte enthält.Using a nonkey column in the subselect statement may result in the deletion of more than 10 rows if the specified column contains duplicate values.

USE AdventureWorks2012;  
GO  
DELETE FROM Purchasing.PurchaseOrderDetail  
WHERE PurchaseOrderDetailID IN  
   (SELECT TOP 10 PurchaseOrderDetailID   
    FROM Purchasing.PurchaseOrderDetail   
    ORDER BY DueDate ASC);  
GO  

B.B. Einschränken der Anzahl eingefügter Zeilen mit TOPUsing TOP to limit the number of rows inserted

Im folgenden Beispiel wird die Tabelle EmployeeSales erstellt, und der Name und die Verkaufszahlen des laufenden Jahres für die ersten fünf Mitarbeiter aus der Tabelle HumanResources.Employee werden eingefügt.The following example creates the table EmployeeSales and inserts the name and year-to-date sales data for the top five employees from the table HumanResources.Employee. Die INSERT-Anweisung wählt fünf Zeilen aus, die von der SELECT-Anweisung zurückgegeben werden, die die in der WHERE-Klausel definierten Kriterien erfüllen.The INSERT statement chooses any five rows returned by the SELECT statement that meet the criteria defined in the WHERE clause. Mit der OUTPUT-Klausel werden die Zeilen angezeigt, die in die EmployeeSales-Tabelle eingefügt werden.The OUTPUT clause displays the rows that are inserted into the EmployeeSales table. Beachten Sie, dass die ORDER BY-Klausel in der SELECT-Anweisung nicht zum Ermitteln der ersten fünf Mitarbeiter verwendet wird.Notice that the ORDER BY clause in the SELECT statement isn't used to determine the top five employees.

USE AdventureWorks2012 ;  
GO  
IF OBJECT_ID ('dbo.EmployeeSales', 'U') IS NOT NULL  
    DROP TABLE dbo.EmployeeSales;  
GO  
CREATE TABLE dbo.EmployeeSales  
( EmployeeID   nvarchar(11) NOT NULL,  
  LastName     nvarchar(20) NOT NULL,  
  FirstName    nvarchar(20) NOT NULL,  
  YearlySales  money NOT NULL  
 );  
GO  
INSERT TOP(5)INTO dbo.EmployeeSales  
    OUTPUT inserted.EmployeeID, inserted.FirstName, inserted.LastName, inserted.YearlySales  
    SELECT sp.BusinessEntityID, c.LastName, c.FirstName, sp.SalesYTD   
    FROM Sales.SalesPerson AS sp  
    INNER JOIN Person.Person AS c  
        ON sp.BusinessEntityID = c.BusinessEntityID  
    WHERE sp.SalesYTD > 250000.00  
    ORDER BY sp.SalesYTD DESC;  
GO    

Wenn Sie die TOP-Klausel verwenden möchten, um Zeilen in einer sinnvollen Reihenfolge einzufügen, verwenden Sie TOP mit ORDER BY in einer untergeordneten SELECT-Anweisung.If you want to use TOP to insert rows in a meaningful chronological order, use TOP with ORDER BY in a subselect statement. Dies wird im folgenden Beispiel veranschaulicht.The following example show how to do this. Mit der OUTPUT-Klausel werden die Zeilen angezeigt, die in die EmployeeSales-Tabelle eingefügt werden.The OUTPUT clause displays the rows that are inserted into the EmployeeSales table. Beachten Sie, dass die ersten fünf Mitarbeiter jetzt basierend auf den Ergebnissen der ORDER BY-Klausel und nicht anhand nicht definierter Zeilen eingefügt werden.Notice that the top five employees are now inserted based on the results of the ORDER BY clause instead of undefined rows.

INSERT INTO dbo.EmployeeSales  
    OUTPUT inserted.EmployeeID, inserted.FirstName, inserted.LastName, inserted.YearlySales  
    SELECT TOP (5) sp.BusinessEntityID, c.LastName, c.FirstName, sp.SalesYTD   
    FROM Sales.SalesPerson AS sp  
    INNER JOIN Person.Person AS c  
        ON sp.BusinessEntityID = c.BusinessEntityID  
    WHERE sp.SalesYTD > 250000.00  
    ORDER BY sp.SalesYTD DESC;  
GO    

C.C. Einschränken der Anzahl aktualisierter Zeilen mit TOPUsing TOP to limit the number of rows updated

Im folgenden Beispiel wird die TOP-Klausel zur Aktualisierung von Zeilen in einer Tabelle verwendet.The following example uses the TOP clause to update rows in a table. Wenn Sie eine TOP (n)-Klausel mit UPDATE verwenden, wird der Updatevorgang für eine nicht definierte Anzahl von Zeilen ausgeführt.When you use a TOP (n) clause with UPDATE, the update operation runs on an undefined number of rows. Das heißt, die UPDATE-Anweisung wählt eine beliebige Anzahl (n) von Zeilen aus, die die in der WHERE-Klausel definierten Kriterien erfüllen.That is, the UPDATE statement chooses any (n) number of rows that meet the criteria defined in the WHERE clause. Im folgenden Beispiel werden 10 Kunden von einem Vertriebsmitarbeiter zu einem anderen zugewiesen.The following example assigns 10 customers from one salesperson to another.

USE AdventureWorks2012;  
UPDATE TOP (10) Sales.Store  
SET SalesPersonID = 276  
WHERE SalesPersonID = 275;  
GO  

Wenn TOP verwendet werden muss, um Updates in einer sinnvollen Abfolge anzuwenden, muss in einer untergeordneten SELECT-Anweisung TOP gemeinsam mit ORDER BY verwendet werden.If you have to use TOP to apply updates in a meaningful chronology, you must use TOP together with ORDER BY in a subselect statement. Mit dem nachfolgenden Beispiel werden die Urlaubsstunden der 10 Mitarbeiter mit dem frühesten Einstellungsdatum aktualisiert.The following example updates the vacation hours of the 10 employees with the earliest hire dates.

UPDATE HumanResources.Employee  
SET VacationHours = VacationHours + 8  
FROM (SELECT TOP 10 BusinessEntityID FROM HumanResources.Employee  
     ORDER BY HireDate ASC) AS th  
WHERE HumanResources.Employee.BusinessEntityID = th.BusinessEntityID;  
GO  

Beispiele: Azure Synapse Analytics (SQL Data Warehouse)Azure Synapse Analytics (SQL Data Warehouse) und Parallel Data WarehouseParallel Data WarehouseExamples: Azure Synapse Analytics (SQL Data Warehouse)Azure Synapse Analytics (SQL Data Warehouse) and Parallel Data WarehouseParallel Data Warehouse

Im folgenden Beispiel werden die obersten 31 Zeilen zurückgegeben, die den Abfragekriterien entsprechen.The following example returns the top 31 rows that match the query criteria. Mit der ORDER BY-Klausel wird sichergestellt, dass es sich bei den 31 zurückgegebenen Zeilen um die ersten 31 Zeilen (basierend auf einer alphabetischen Sortierung der Spalte LastName) handelt.The ORDER BY clause ensures that the 31 returned rows are the first 31 rows based on an alphabetical ordering of the LastName column.

Verwenden Sie TOP, ohne WITH TIES anzugeben.Using TOP without specifying ties.

SELECT TOP (31) FirstName, LastName   
FROM DimEmployee ORDER BY LastName;  

Ergebnis: 31 Zeilen werden zurückgegeben.Result: 31 rows are returned.

Verwenden Sie TOP mit Angabe von WITH TIES.Using TOP, specifying WITH TIES.

SELECT TOP (31) WITH TIES FirstName, LastName   
FROM DimEmployee ORDER BY LastName;  

Ergebnis: 33 Zeilen werden zurückgegeben, da drei Mitarbeiter namens „Brown“ in der 31. Zeile vorhanden sind.Result: 33 rows are returned, because three employees named Brown tie for the 31st row.

Weitere InformationenSee Also

SELECT (Transact-SQL) SELECT (Transact-SQL)
INSERT (Transact-SQL) INSERT (Transact-SQL)
UPDATE (Transact-SQL) UPDATE (Transact-SQL)
DELETE (Transact-SQL) DELETE (Transact-SQL)
ORDER BY-Klausel (Transact-SQL) ORDER BY Clause (Transact-SQL)
SET ROWCOUNT (Transact-SQL) SET ROWCOUNT (Transact-SQL)
MERGE (Transact-SQL)MERGE (Transact-SQL)