我如何在SQL服务器中使用for循环

Use*_*r M 5 sql sql-server

我必须更新SQL Server 2005中的表中的多行(29).

SELECT * from tblState ORDER BY StateCode ASC. 
Run Code Online (Sandbox Code Playgroud)

在这个表中有一个整数列,我需要分配从1到29开始的数字.例如

BEFORE

A 3 

B 6

C 2 
D 1 
Run Code Online (Sandbox Code Playgroud)

AFTER

A 1  
B 2  
C 3  
D 4
Run Code Online (Sandbox Code Playgroud)

如何有效地使用递增的序列号更新每一行?

Mat*_*lie 5

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
Run Code Online (Sandbox Code Playgroud)

当你要求循环时,我猜你可能不理解这段代码.

因此,我强烈建议您创建一个虚拟表来使用它,既可以了解它的工作原理,也可以确保它能够满足您的需求.

  • WITH语句类似于子查询
  • 在那里,ROW_NUMBER()创建您想要的顺序ID
  • 外部查询然后更新列(虽然它引用子查询,实际表确实更新)