TOP kann nicht zusammen mit UPDATE- und DELETE-Anweisungen für partitionierte Sichten verwendet werden.
Die Zeilen, auf die im TOP-Ausdruck verwiesen wird, die mit INSERT, UPDATE, MERGE oder DELETE verwendet werden, sind nicht in einer bestimmten Reihenfolge angeordnet. 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;
SQL Server 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-, MERGE- oder DELETE-Anweisungen tatsächlich betroffen sind.
Verwenden von TOP in der MERGE-Anweisung
Wenn eine TOP-Klausel in der MERGE-Anweisung angegeben wird, wird die TOP-Klausel nach dem Verbinden der gesamten Quelltabelle und der gesamten Zieltabelle angewendet, wenn die verbundenen Zeilen entfernt wurden, die für einen Einfüge-, Aktualisierungs- oder Löschvorgang nicht in Betracht kommen. 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. Das heißt, für die Verteilung der Zeilen auf die in den WHEN-Klauseln definierten Aktionen gilt keine bestimmte Reihenfolge. Wenn beispielsweise TOP (10) angegeben wird, sind 10 Zeilen betroffen. Von diesen Zeilen können 7 aktualisiert und 3 eingefügt werden, oder 1 Zeile kann gelöscht, 5 können aktualisiert und 4 eingefügt werden usw.
Da die MERGE-Anweisung einen vollständigen Tabellenscan der Quell- und der Zieltabelle ausführt, kann die E/A-Leistung beeinträchtigt werden, wenn mit der TOP-Klausel eine große Tabelle durch Erstellen mehrerer Batches geändert wird. In diesem Szenario muss unbedingt sichergestellt werden, dass alle aufeinander folgenden Batches auf neue Zeilen zeigen. Weitere Informationen finden Sie unter Optimieren der Leistung bei MERGE-Anweisungen.