Ich habe eine Tabelle in SQL Server. Ich möchte die obersten 1000 Zeilen daraus löschen. Ich habe dies jedoch versucht, aber anstatt nur die obersten 1000 Zeilen zu löschen, wurden alle Zeilen in der Tabelle gelöscht.
Hier ist der Code:
delete from [mytab]
select top 1000
a1,a2,a3
from [mytab]
sql
sql-server
sql-delete
edgarmtze
quelle
quelle
delete from [mytab]
es sich um eine Anweisung undselect top ...
eine andere handelt.Antworten:
Der Code, den Sie ausprobiert haben, besteht aus zwei Anweisungen. A
DELETE
gefolgt von aSELECT
.Sie definieren nicht,
TOP
nach was geordnet.Für ein bestimmtes Bestellkriterium ist das Löschen aus einem CTE oder einem ähnlichen Tabellenausdruck der effizienteste Weg.
quelle
DELETE TOP (1000) FROM table ORDER BY column
, lesen Sie Folgendes : "Die Zeilen, auf die im TOP-Ausdruck verwiesen wird, der mit INSERT, UPDATE, MERGE oder DELETE verwendet wird, sind nicht in beliebiger Reihenfolge angeordnet."WITH
Beschwerden von Personen angehängt wird, die dies nicht getan haben.Kann für sql2005 + besser sein:
Für Sql2000:
ABER
Wenn Sie eine bestimmte Teilmenge von Zeilen anstelle einer beliebigen Teilmenge löschen möchten , sollten Sie die Reihenfolge der Unterabfrage explizit angeben:
Vielen Dank an tp @gbn für die Erwähnung und Forderung der klareren und genaueren Antwort.
quelle
Wie im folgenden Link definiert, können Sie auf einfache Weise löschen
http://technet.microsoft.com/en-us/library/ms175486(v=sql.105).aspx
quelle
quelle
quelle
Es ist schnell. Versuch es:
YourTABLE
Durch Tabellennamen ersetzen ,XX
durch eine Zahl, z. B. 1000,pk
ist der Name des Primärschlüsselfelds Ihrer Tabelle.quelle