SQL Server 2005のテーブルの複数の行(29)を更新する必要があります。
SELECT * from tblState ORDER BY StateCode ASC.
この表には、1から29までの番号を割り当てる必要がある整数列があります。たとえば、
BEFORE
A 3
B 6
C 2
D 1
AFTER
A 1
B 2
C 3
D 4
昇順の連続番号で各行を効率的に更新するにはどうすればよいですか?
SQL Server 2005のテーブルの複数の行(29)を更新する必要があります。
SELECT * from tblState ORDER BY StateCode ASC.
この表には、1から29までの番号を割り当てる必要がある整数列があります。たとえば、
BEFORE
A 3
B 6
C 2
D 1
AFTER
A 1
B 2
C 3
D 4
昇順の連続番号で各行を効率的に更新するにはどうすればよいですか?
WITH
sequenced_data AS
(
SELECT
ROW_NUMBER() OVER (ORDER BY StateCode ASC) AS sequence_id,
*
FROM
tblState
)
UPDATE
sequenced_data
SET
integer_column = sequence_id
ループを求めているので、このコードを理解していない可能性があります。
そのため、ダミーのテーブルを作成してこれを試してみることを強くお勧めします。これは、それがどのように機能するかを理解し、希望/期待どおりに動作することを確認するためです。
WITH
サブクエリに似ています ROW_NUMBER()
あなたが望むシーケンシャルIDを作成します 可能な限り、SQL でのループを避ける必要があります。SQL Server は、セットベースの操作に向けて大幅に最適化されています。
この場合、CTE
withROW_NUMBER
関数を使用できます。
WITH CTE AS
(
SELECT StateCode, IntColumn
, RN = ROW_NUMBER() OVER (ORDER BY StateCode ASC)
FROM dbo.tblState
)
UPDATE CTE SET IntColumn = RN;
cteなしの私のオプション:
UPDATE d
SET d.integer_column = d.sequence_id
FROM (
SELECT integer_column, ROW_NUMBER() OVER (ORDER BY StateCode ASC) AS sequence_id
FROM dbo.tblState
) d
これを試して:
with CTE1 as(select StateCode,intcol,ROW_NUMBER() over (order by StateCode) as rn from tbln)
update CTE1 set intcol=rn
select * from tbln
共通テーブル式を使用できます
with c as
(
select ID, ROW_NUMBER()
over (order by StateCode ASC) as cn
from tblState
)
update c set ID = cn
新しい行を挿入するたびに番号を変更する必要があるため、番号をテーブルに保存しないでください。
やるだけ
SELECT
ROW_NUMBER() OVER (ORDER BY StateCode ASC) sequence_id
, *
FROM
tblState
データを取得するたびに。
多くの行があり、これを高速に行う必要がある場合は、StateCode ASC