• ベストアンサー

SQLSERVER 連番更新について

<環境>SQLSERVER 一時ワークテーブルのフィールドに指定した番号以降の連番を更新したいのですが、 クエリーで更新する方法はありますか? 例) <更新前のテーブル> コード 名前  連番  001  AAA  null 002  BBB  null 003  CCC  null <更新後のテーブル> 15以降の連番を更新する コード 名前  連番  001  AAA   15 002  BBB   16 003  CCC   17

質問者が選んだベストアンサー

  • ベストアンサー
  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.1

SQLServer2005以降ならROW_NUMBERが使えます --- UPDATE Table SET 連番 = ROW_NUMBER() OVER(ORDER BY コード) + 14 FROM Table

参考URL:
http://msdn.microsoft.com/ja-jp/library/ms186734(v=sql.90).aspx
noname#208236
質問者

補足

ROW_NUMBER() OVER(ORDER BY コード) + 14 で連番は取得できたのですが、 「ウィンドウ関数は、SELECT 句または ORDER BY 句だけで使用できます。」 とエラーが出ます。 これはどうすればよいのでしょうか?

その他の回答 (1)

  • 3rd_001
  • ベストアンサー率66% (115/174)
回答No.2

エラーどおりなので、Selectした結果とジョインして更新をかけます。 ※この場合、コードが一意にならないと駄目です。 create table test ( コード varchar(10), 名前 varchar(10), 連番 int ); insert into test values('001','AAA',null); insert into test values('002','BBB',null); insert into test values('003','CCC',null); select * from test; UPDATE test SET test.連番 = b.NewNo FROM test inner join ( select コード, (ROW_NUMBER() OVER(ORDER BY コード) + 14) as NewNo FROM test) as b on test.コード = b.コード ; select * from test; (1 行処理されました) (1 行処理されました) (1 行処理されました) コード 名前 連番 ---------- ---------- ----------- 001 AAA NULL 002 BBB NULL 003 CCC NULL (3 行処理されました) (3 行処理されました) コード 名前 連番 ---------- ---------- ----------- 001 AAA 15 002 BBB 16 003 CCC 17 (3 行処理されました)

関連するQ&A