Zasadniczo chcę, aby to zrobić:proszę wyjaśnić usunąć górną 100 składni SQL
delete top(100) from table order by id asc
ale MS SQL nie zezwala na zamówienie w tej pozycji
Wspólne rozwiązanie wydaje się być to:
DELETE table WHERE id IN(SELECT TOP (100) id FROM table ORDER BY id asc)
Ale również ta metoda here:
delete table from (select top (100) * from table order by id asc) table
który ma znacznie lepszy szacunkowy plan wykonania (74:26). Niestety tak naprawdę nie rozumiem składni, proszę, może ktoś mi to wytłumaczy?
Zawsze zainteresowany innymi metodami, aby osiągnąć ten sam wynik.
EDYCJA: Nadal go nie dostaję Obawiam się, chcę móc odczytać zapytanie, ponieważ czytam pierwsze dwa, które są praktycznie angielskie. Powyższe pytania są dla mnie:
delete the top 100 records from table, with the records ordered by id ascending
delete the top 100 records from table where id is anyone of (this lot of ids)
delete table from (this lot of records) table
nie mogę zmienić trzeci w logiczną zdania angielskiego ... Chyba co próbuję dostać się na to w jaki sposób to turn into „usunąć z tabeli (ta mnóstwa zapisów) ". "Od" wydaje się być w nielogicznej pozycji, a druga wzmianka o "stole" jest logicznie zbyteczna (dla mnie).
nie mogę dopasować do jednego ze swoich 4 składni z trzecim przykładzie, który brzmi dla mnie jak „Usuń tabelę z subtable stołu”. Zobacz moją edycję na pytanie. – Patrick
@Patrick: Możesz dodać opcjonalne "od" do zapytania (różnica między trzecim i czwartym formularzem powyżej), aby uczynić go bardziej logicznym. Poprawiłem powyższe formularze, aby były bardziej opisowe. – Guffa
@Patrick: Zapytanie można opisać po angielsku jako "usuń wszystkie rekordy z tabeli pasujące do jego rekordów (ta część rekordów nazywa się" table ")." Zauważ, że ostatnia "tabela" w zapytaniu jest aliasem, a nie faktyczną nazwą tabeli. – Guffa