2009-08-12 17 views

答えて

6
WITH q AS (
     SELECT m.*, ROW_NUMBER() OVER (ORDER BY column) AS rn 
     FROM mytable m 
     ) 
UPDATE q 
SET  mycol = 'newvalue' 
WHERE rn = @Y 
SQL

に暗黙行の順序の概念がないことに注意されたいです。

注文条件(上記の例ではcolumn)を定義しない限り、n'th rowはありません。この表に

col1 col2 
1 2 
2 1 

、行(1, 2)最初にcol1により注文時、及び第二col2により注文時。

+0

* * where句の条件がないので、テーブルに同じ行があると仮定します。そうであれば、この更新プログラムを実行すると、更新プログラムが2回実行されたとき(月と惑星の位置がずれている)異なる行が更新される可能性があります。私はあなたが**これを知っていると確信していますし、実際には起こることはほとんどありませんが、理論的にはそうかもしれません。 * * –

+0

しかし、もう一度、それは得られるほど良いものです。 +1 –

+0

'@ Lieven':最初のクエリとしてのみ有効です:)' UPDATE'が成功した後、 '@ op'は新しい条件を取得します:' mycol = 'newvalue''そして次の 'UPDATE'はこれを使って。 – Quassnoi

0

まず候補キー(複合キーでも可)を既に持っているか、代理キーを使用するかを選択して、主キーを追加します。その後、where句で条件を条件として使用できます。

関連する問題