2016-03-22 9 views
1

条件を満たす場合に列の値を更新する必要がありました。私はこのクエリが、奇妙な方法でその挙動するを試してみました1,2,3,4,5,...条件の列の値の更新

に値を望んでいました。私はあなたがWHERE句で指定された基準を満たすレコードを列挙したいように思え2すなわち2,3,4,5,..

declare @id int; 

set @id = 0; 

UPDATE table 
SET id = @id + 1, @id = @id + 1 
WHERE col4 = 100 
    AND col5 = 500 
    AND col3 = 2 
+1

テーブル定義、サンプルデータ、および予想される出力を入力してください:http://stackoverflow.com/help/how-to -ask。あなたが期待していないエラーメッセージや動作を受け取っている場合は、それについての詳細も記入してください。 –

+0

ROWNUMBERに見て()または数字テーブル –

+0

あなたのクエリは、MySQLのクエリではなく、SQL Serverのクエリのように見えます。 –

答えて

4

から始まる値を取得しています。私はROW_NUMBERCTEを使用することをお勧めします:

;WITH ToUpdate AS (
    SELECT id, 
     ROW_NUMBER() OVER (ORDER BY col3) AS rn 
    FROM mytable 
    WHERE col4=100 AND col5=500 AND col3=2 
) 
UPDATE ToUpdate 
SET id = rn 
+0

私の質問に何が問題なのか分かりますか? –

+0

J19 @クエリでの問題は、 '@のid'は*最初* *読み、その後に設定し、*されていることです。 –

0

はこれを試してみてください -

Declare @id int; 
Set @id=1; 

UPDATE table 
SET @id = id = @id + 1 
WHERE 
(col4=100 AND col5=500 AND col3=2)