Mam tabelę w SQL Server. Chciałbym usunąć z niego 1000 pierwszych wierszy. Jednak próbowałem tego, ale zamiast po prostu usunąć pierwsze 1000 wierszy, usunąłem wszystkie wiersze w tabeli.
Oto kod:
delete from [mytab]
select top 1000
a1,a2,a3
from [mytab]
sql
sql-server
sql-delete
edgarmtze
źródło
źródło
delete from [mytab]
jest to jedna instrukcja, aselect top ...
druga.Odpowiedzi:
Kod, który wypróbowałeś, to w rzeczywistości dwie instrukcje. A,
DELETE
po którym następujeSELECT
.Nie definiujesz
TOP
jako uporządkowany według czego.W przypadku określonych kryteriów porządkowania najbardziej efektywnym sposobem jest usunięcie z CTE lub podobnego wyrażenia tabeli.
źródło
DELETE TOP (1000) FROM table ORDER BY column
, przeczytaj to : „Wiersze, do których odwołuje się wyrażenie TOP używane z poleceniami INSERT, UPDATE, MERGE lub DELETE nie są ułożone w żadnej kolejności”.WITH
poprzedza skargi od osób, które tego nie zrobiły.Może być lepszy w użyciu dla sql2005 +:
Dla Sql2000:
ALE
Jeśli chcesz usunąć określony podzbiór wierszy zamiast dowolnego podzbioru, powinieneś jawnie określić kolejność podzapytania:
Dzięki tp @gbn za wspomnienie i zażądanie bardziej jasnej i dokładnej odpowiedzi.
źródło
Jak określono w linku poniżej, możesz usunąć w prosty sposób
http://technet.microsoft.com/en-us/library/ms175486(v=sql.105).aspx
źródło
źródło
źródło
To jest szybkie. Spróbuj:
Zastąp
YourTABLE
nazwą tabeli,XX
liczbą, na przykład 1000,pk
jest nazwą pola klucza podstawowego tabeli.źródło