9 Stimmen

Wie kann man die TOP 400 aktualisieren?

Ich möchte die obersten 400 Zeilen in einer Datenbanktabelle aktualisieren. Die Pseudo-SQL ist unten, wie kann ich dies tun?

UPDATE top (400) db.dbo.tbl
SET column1 = 2
WHERE column2 = 1
  AND column1 is null

9voto

Neil N Punkte 24394
 UPDATE db.dbo.tbl SET column1 = 2 WHERE
 primaryID IN (
   SELECT TOP (400) primarkyID FROM db.dbo.tbl
   WHERE column2 = 1 AND column1 IS NULL
 )

Aber ich mag das nicht, da es keine Möglichkeit gibt, zu garantieren, WELCHE der oberen 400, sollten Sie vielleicht eine andere Art von Kriterien hinzufügen. Und sogar ein Order By zur Unterabfrage.

5voto

HLGEM Punkte 91543

Wie würden Sie die besten 400 ermitteln? Da es keine Reihenfolge gibt, ist nicht gewährleistet, dass immer dieselbe Menge ausgewählt wird und somit die falschen Datensätze aktualisiert werden könnten.

5voto

Quassnoi Punkte 396418
WITH    q AS
        (
        SELECT  TOP 400 *
        FROM    db.dbo.tb
        WHERE   column2 = 1
                AND column1 is null
        ORDER BY
                column3 -- choose your order!
        )
UPDATE  q
SET     column2 = 2

4voto

bernhof Punkte 6101

Wahrscheinlich suchen Sie so etwas wie das hier:

update db.dbo.tbl set column1 = 2 
where ID in (
  select top 400 ID from db.dbo.tbl
  where column2 = 1 and column1 is null --the criteria have been moved here
  order by ID --order by clause recommended
  )

wobei ID die Primärschlüsselspalte der Tabelle ist.

4voto

Dave Carlile Punkte 7167

Wenn Sie SQL Server 2008 verwenden, funktioniert die Syntax "top n" bei Lösch- und Aktualisierungsanweisungen. Andernfalls funktionieren die anderen hier aufgeführten Methoden, bei denen Sie die Primärschlüssel in einer Unterabfrage oder abgeleiteten Tabelle identifizieren, gut. Und wie bereits von anderen erwähnt, ist die "order by"-Syntax sehr empfehlenswert, da sich die aktualisierten Zeilen von einer Abfrage zur nächsten unterscheiden können.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X