Chcę zaktualizować 100 najlepszych rekordów w SQL Server. Mam stolik T1
z polami F1
i F2
. T1
ma 200 rekordów. Chcę zaktualizować F1
pole w 100 najlepszych rekordach. Jak mogę zaktualizować w oparciu o TOP 100
SQL Server?
sql
sql-server
tsql
sql-update
Rajesz
źródło
źródło
order by
?Bez
ORDER BY
całej ideiTOP
nie ma większego sensu. Musisz mieć spójną definicję tego, który kierunek jest „w górę”, a który „w dół”, aby koncepcja góry była znacząca.Niemniej jednak SQL Server pozwala na to, ale nie gwarantuje wyniku deterministycznego .
UPDATE TOP
Składnia w przyjętym odpowiedź nie obsługujeORDER BY
klauzuli, ale jest możliwe, aby uzyskać deterministyczne semantyki tutaj przy użyciu CTE lub tabelę pochodzącą zdefiniować pożądany porządek jak poniżej.źródło
TOP
kursów, powinieneś z nich korzystać,ORDER BY
ponieważ to, co Cię interesuje, jest jak „najbardziej” lub „najmniej” czegoś. W innych przypadkach możesz być zainteresowany uzyskaniem tylko jednego pasującego rekordu. Polub mnie dzisiaj! Musiałem naprawiać problemy z danymi (cyklami) pojedynczo. Cały proces naprawy obejmował skrypt db, interwencję użytkownika i niektóre operacje aplikacji. Nie obchodziło nas, który rekord został obsłużony jako pierwszy. Troszczyliśmy się tylko o to, abyśmy sobie z nimi radzili pojedynczo.WHERE
klauzulę wykluczającą wcześniej przetworzone rekordy. Pytanie w formie pisemnej i zaakceptowanej nie ma żadnego znaczenia. BTW: Do używania tabel jako kolejki jest to dość przydatne łączewhere
klauzuli, aby uniknąć ponownego przetwarzania tych samych wierszy.dla takich jak ja nadal utknąłem z SQL Server 2000,
SET ROWCOUNT {number};
można użyć przedUPDATE
zapytaniemograniczy aktualizację do 100 wierszy
Jest przestarzałe przynajmniej od SQL 2005, ale od SQL 2017 nadal działa. https://docs.microsoft.com/en-us/sql/t-sql/statements/set-rowcount-transact-sql?view=sql-server-2017
źródło
źródło
Co jeszcze fajniejsze, to fakt, że możesz użyć wbudowanej funkcji wycenianej w tabeli, aby wybrać, które (i ile poprzez
TOP
) wierszy chcesz zaktualizować. To jest:Dla funkcji wycenianej w tabeli masz coś interesującego, aby wybrać wiersz do aktualizacji, np .:
... i leży (moim skromnym zdaniem) prawdziwa moc aktualizowania tylko wybranych wybranych wierszy deterministycznie, przy jednoczesnym uproszczeniu składni
UPDATE
instrukcji.źródło
Próbować:
źródło
Możesz także zaktualizować z wyboru za pomocą aliasu i dołączyć:
źródło