2009-09-28 8 views
8

Ich muss die ersten N Zeilen in einer Tabelle aktualisieren, die eine Bedingung erfüllen.Wie aktualisiere ich n Zeilen in einer Tabelle?

Ich weiß, dass ich ein Update Top N machen kann ... aber das Problem ist, dass N in einer @ Variable ist.

UPDATE TOP @N SET ... funktioniert nicht.

Gibt es eine Möglichkeit, dies zu tun, die ich gerade vermisse?

Keine spezifischen Tabellen-Definitionen hier, weil es egal ist, was die Spalten sind .. Wenn ich es für eine Tabelle mit einer Spalte tun kann, kann ich es für meine Tabelle tun.

Antwort

16

Sie müssen Pars nach TOP Klausel verwenden, wenn Sie eine Variable verwenden möchten:

UPDATE TOP(@N) ... 
+0

Cooler Trick! Danke, dass du es mir beigebracht hast. Interessanterweise funktioniert diese Syntax nicht mit dem Konstrukt 'SELECT TOP n'. Ich kann, warum das passieren würde, obwohl es eine seltsame Asymmetrie in TSQL ist. – mjv

+0

'SELECT TOP n' funktioniert nur, wenn' n' eine Konstante ist, keine Variable. Es funktionierte so wie vor 2005. 'TOP' mit einem variablen Argument und' TOP' für DML-Anweisungen wurde seit 2005 hinzugefügt und erfordert Parens. –

+0

Das wäre aber wirklich cool, "update top (@N) set systemuserid = @ID wo systemuserid ist null" gibt mir "Falsche Syntax in der Nähe des Schlüsselwortes 'set'". – Moose

10
WITH q AS 
     (
     SELECT TOP (@r) * 
     FROM mytable 
     ORDER BY 
       col1 
     ) 
UPDATE q 
SET  co12 = @value 

UPDATE TOP (@r) funktionieren wird, aber es wird jede @r Reihen in keiner bestimmten Reihenfolge aktualisieren.

Vom documentation:

Die referenzierten Zeilen in dem TOP Ausdruck mit INSERT, UPDATE verwendet oder DELETE werden in beliebiger Reihenfolge nicht angeordnet. TOP n gibt n zufällige Zeilen zurück.

+0

'@ KM': Diesmal korrigierte ich die Aussage * bevor * du zeigteest :) – Quassnoi

+0

+1, ich höre zu lernen, also probiere ich viel Code aus, habe nie ein UPDATE eines CTE gesehen, werde ich muss mit dem ein wenig spielen ... –

+0

'@ KM': sehr nützlich, um Duplikate zu löschen. http://explainextended.com/2009/03/14/deleting-duplicates/ – Quassnoi

Verwandte Themen