8

テーブルの列を更新して、1 から (レコード数によって決まる最大数) までの値を使用しようとしています。

これを正しく説明しているかどうかわからないので、更新しようとしているデータで SQLFiddle をセットアップします。

SQL フィドル

バージョン列を1から(最大数)に設定したい。このクエリをバージョン番号のスケールに書き直す方法はありますか? のように、最初のレコードで 1 を使用し、2 番目のレコードで 2 を使用するなど...

UPDATE Documents
SET Version = 1
4

3 に答える 3

4

CTE と結合なしでそれを行うことができます。

with RankedDocument as
(
  select *
    , rn = row_number() over (order by ID)
  from Documents
)
update RankedDocument
set Version = rn

demo を使用した SQL Fiddle

于 2013-05-30T16:24:22.553 に答える
3

私が知る限り、あなたは からのすべてのレコードに 1 ..... N から移動する数値Documentsを持たせたいと考えています。version

一時テーブルとROW_NUMBERテクニックを使用して増分を取得versionUPDATE、元のテーブルに戻すことができます。

CREATE TABLE #Temp (ID int, Version int)

INSERT INTO #Temp (ID, Version)
SELECT ID, ROW_NUMBER() OVER (ORDER BY ID ASC)
FROM Documents

UPDATE Doc
SET Version = TT.Version
FROM Documents AS Doc INNER JOIN #Temp AS TT ON Doc.ID = TT.ID

DROP TABLE #Temp

私があなたを正しく理解していれば..

于 2013-05-30T16:21:31.383 に答える
1

これを試して:

;WITH list AS (
  SELECT
      ID
    , Version = ROW_NUMBER() OVER( ORDER BY VersionID ASC )
  FROM Documents
)
UPDATE d SET  
  d.Version = x.Version
FROM Documents AS d
INNER JOIN list as x ON d.ID=x.ID

SELECT * FROM Documents

順序 ( ORDER BY VersionID ASC ) を必要な順序に変更できます。

于 2013-05-30T16:22:48.083 に答える