Chcę zaktualizować 100 najlepszych rekordów w SQL Server. Mam tabelę T1
z polami F1
i F2
. T1
ma 200 rekordów. Chcę zaktualizować pole F1
w 100 najlepszych rekordach. Jak mogę zaktualizować na podstawie TOP 100
w SQL Server?Jak mogę zaktualizować 100 najlepszych rekordów w serwerze sql
Odpowiedz
Uwaga, nawiasy są wymagane dla instrukcji UPDATE:
update top (100) table1 set field1 = 1
Każdy pomysł jak użyć 'order przez "również? –
@JoePhilllips Użyj odpowiedzi Martina Smitha na zamówienie przez – jjxtra
Nie są to jednak 100 najlepszych rekordów, ale po prostu 100 arbitralnie wybranych rekordów. Top 100 zawierałby kolejność uporządkowania rekordów. –
update tb set f1=1 where id in (select top 100 id from tb where f1=0)
Skorzystanie z tej konstrukcji jest cholernie powolne ... – Lu4
Bez ORDER BY
cała idea TOP
nie ma większego sensu. Musisz mieć spójną definicję tego, który kierunek jest "w górę", a który "w dół", aby pojęcie wierzchołka było znaczące.
Mimo to SQL Server pozwala na to, ale doesn't guarantee a deterministic result.
Składnia UPDATE TOP
w zaakceptowanej odpowiedzi nie obsługuje klauzuli ORDER BY
, ale można tutaj uzyskać semantykę deterministyczną za pomocą CTE lub tabeli pochodnej w celu zdefiniowania pożądanej kolejności sortowania, jak poniżej.
;WITH CTE AS
(
SELECT TOP 100 *
FROM T1
ORDER BY F2
)
UPDATE CTE SET F1='foo'
Powód przegranej? 'TOP' bez' ORDER BY' ** jest ** bez znaczenia. Otrzymujesz nieokreślone wiersze '100'. –
nic nie znaczący jak w żadnym realnym świecie – Rohit
Mówisz, że bez znaczenia, ale to nieprawda.Przyznaję, że/zwykle /, kiedy używasz 'TOP' odds, powinieneś używać go z' ORDER BY', ponieważ to, co cię interesuje, jest jak "najbardziej" lub "najmniej" czegoś. W innych przypadkach możesz być zainteresowany tylko uzyskaniem jednego pasującego rekordu. Lubię mnie dzisiaj! Musiałem rozwiązywać problemy z danymi (cykle) pojedynczo. Cały proces naprawy dotyczył skryptu db, interwencji użytkownika i niektórych operacji aplikacji. Nie obchodziło nas, który rekord został obsłużony jako pierwszy. Po prostu obchodziło nas, że zajmujemy się nimi po jednym na raz. – MetaFight
dla takich jak ja nadal tkwi w SQL Server 2000, SET ROWCOUNT {number};
można stosować przed UPDATE
zapytania
SET ROWCOUNT 100;
UPDATE Table SET ..;
SET ROWCOUNT 0;
ograniczy aktualizację do 100 wierszy
Zostało ono przestarzałe przynajmniej od SQL 2005, ale od SQL 2012 nadal działa. EDIT: został zabity w SQL 2014. Użycie SET ROWCOUNT nie wpłynie na polecenia DELETE, INSERT i UPDATE w SQL Server 2014 i nowszych wersjach.
ZESTAW ROWCOUNT wpływa na wyzwalacze oraz aktualizowaną komendę. Jeśli masz zestaw kasowania kaskadowego, może on zawieść transakcji, jeśli w tabeli podrzędnej znajduje się więcej niż rzędów wierszy potomka. – EricI
Z tym powiedziane, SET ROWCOUNT @RowCountParameter; jest poprawna składnia, podczas gdy SELECT TOP @RowCountParamter * FROM TableName jest niepoprawna. Jeśli chcesz skonfigurować aktualizowane wiersze, SET ROWCOUNT # jest obecnie lepszym rozwiązaniem, o ile nie masz tabel podrzędnych z włączoną funkcją Cascade Delete. – EricI
Co jest jeszcze ciekawsze, to fakt, że można użyć wbudowanej funkcji wyceny stołowej, aby wybrać, które (i ile z numerów TOP
) zaktualizować. Czyli:
UPDATE MyTable
SET [email protected]
FROM tvfSelectLatestRowOfMyTableMatchingCriteria(@Param1,@Param2,@Param3)
Dla funkcji tabeli wyceniane masz coś ciekawego do wybierz wiersz zaktualizować jak:
CREATE FUNCTION tvfSelectLatestRowOfMyTableMatchingCriteria
(
@Param1 INT,
@Param2 INT,
@Param3 INT
)
RETURNS TABLE AS RETURN
(
SELECT TOP(1) MyTable.*
FROM MyTable
JOIN MyOtherTable
ON ...
JOIN WhoKnowsWhatElse
ON ...
WHERE [email protected] AND ...
ORDER BY MyTable.SomeDate DESC
)
... i leży (moim skromnym zdaniem) prawdziwej władzy aktualizowania tylko wybranych górnych rzędów w sposób deterministyczny, przy jednoczesnym uproszczeniu składni instrukcji UPDATE
.
- 1. Jak mogę zaktualizować top 100 wierszy w DB2
- 2. Wybierz 10 najlepszych rekordów dla każdej kategorii
- 3. Jak napisać kwerendę linq, aby dopasować SQL, jak wybrać 100 najlepszych * z zakładki?
- 4. Jak znaleźć listę tabel bez rekordów w serwerze SQL?
- 5. Jak zaktualizować kolumnę tożsamości w SQL Server?
- 6. Jak generować losowe dane w serwerze SQL
- 7. Liczba odrębnych rekordów - SQL
- 8. Jak mogę uzyskać wyniki sql powyżej 100 w zeppelinie Apache?
- 9. W konsoli Rails. jak zaktualizować pole dla wszystkich rekordów?
- 10. SQL - Zaktualizuj wiele rekordów w jednym zapytaniu
- 11. Jak wybrać Top 100 wierszy w Oracle?
- 12. Jak usunąć duplikaty rekordów w sql
- 13. LINQ do SQL - aktualizacja rekordów
- 14. Jak używać warunku z wieloma wartościami w serwerze sql 2005?
- 15. Zaktualizuj kolumnę autoinkrementacji w serwerze SQL
- 16. Jak zaktualizować bazę danych na zdalnym serwerze ms sql (najpierw Kod EF)
- 17. użyciu tabel rekordów w PL/SQL
- 18. Oracle SELECT rekord 10 najlepszych
- 19. Jak zaktualizować dane w jednej tabeli z odpowiednich danych w innej tabeli w SQL Server 2005
- 20. Jak mogę zaktualizować IntelliJ IDEA?
- 21. Jak zaktualizować i porządek za pomocą MS SQL
- 22. Jak mogę wybrać 10 najlepszych ze słownika w .NET?
- 23. jak do usuwania 8.500.000 rekordów z jednej tabeli na serwerze sql
- 24. jak pracować z wyzwalaczem po wstawieniu w serwerze sql 2008
- 25. Jak mogę zaktualizować wartości logiczne w mysql?
- 26. Jak mogę zaktualizować element wektorowy w Clojure?
- 27. jak mogę zaktualizować wiele dokumentów w mangusta
- 28. Jak zaktualizować za pomocą Linq-To-SQL?
- 29. Jak zwrócić 100 pierwszych wierszy według wartości kolumny, a następnie wybrać losowo pierwsze 100 wierszy?
- 30. Zapisz Tablica bajtów w serwerze sql
Ten link może Ci pomóc http://www.codefari.com/2015/10/how-can-i-update-top-10-records-in-sql.html – Singh