- 締切済み
Transact-SQLで順番に日付をセットするには?
主キーが存在しないうえに、まったく同じデータが1万件件あります。 そのデータに対して日付項目だけ 2009/1/1、2009/1/2...といった感じで順番にUPDATEをかけたいのですが Transact-SQLで実装するにはどうすればいいでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- jamshid6
- ベストアンサー率88% (591/669)
#1です。やったことはなかったんですけど、SQL Server 2005以降であれば、以下の方法でもやれますね。 UPDATE t SET DATE=DATEADD(d,t.SEQ,'2008/12/31') FROM (SELECT ROW_NUMBER() OVER (ORDER BY DATE) SEQ,* FROM TABLE1) t
- jamshid6
- ベストアンサー率88% (591/669)
主キーがなく、全く同じデータということは1行毎に更新を掛けることができないということです。 従って、以下のいずれかの方法で一時的にユニークになるキーを設ける必要があります。 1)そのテーブルに一時的に連番を振る 2)一時テーブルを使って加工し、最後にテーブルの中身を入れ替える それぞれのサンプルは以下の通りです。 後者の場合は、そのテーブルに外部キーが設定されていないことを前提に書いています。 1) ALTER TABLE TABLE1 ADD [SEQ][int] IDENTITY UPDATE TABLE1 SET DATE=DATEADD(d,SEQ,'2008/12/31') ALTER TABLE TABLE1 DROP COLUMN [SEQ] 2) SELECT * INTO #WORK FROM TABLE1 ALTER TABLE #WORK ADD [SEQ][int] IDENTITY UPDATE #WORK SET DATE=DATEADD(d,SEQ,'2008/12/31') ALTER TABLE #WORK DROP COLUMN [SEQ] ------------------------ここまでやって一度結果を確認した方がベター TRUNCATE TABLE TABLE1 INSERT INTO TABLE1 SELECT * FROM #WORK DROP TABLE #WORK
補足
回答ありがとうございます T-SQLだとPGを組むようにはいかないようですね 書いて頂いたサンプルで試してみますー 結果が出たらお礼の方に書きますね