sql - 在 SQL Server 中循环遍历行并自动为每一行添加一个列号

标签 sql sql-server sql-server-2008 t-sql

我有一个超过 500 行的表,其中有一列名为 ID,其日期类型为 INT。目前这些值都是NULL

我想要实现的是用每行的增量数字填充 ID 列,例如 1、2、3、4、...、500 等。

请帮助我了解如何通过 SQL 脚本实现此目的。

最佳答案

在 CTE 中使用 ROW_NUMBER 是一种方法,但这里有另一种方法;创建一个新的 id1 列作为 int Identity(1,1),然后复制到 id,然后删除 id1:

-- sample table
create table myTable(id int, value varchar(100));

-- populate 10 rows with just the value column
insert into myTable(value)
select top 10 'some data'
from sys.messages;
go

-- now populate id with sequential integers
alter table myTable add id1 int identity(1,1)
go
update myTable set id=id1;
go
alter table myTable drop column id1;
go
select * from myTable

结果:

id          value
----------- -------------
1           some data
2           some data
3           some data
4           some data
5           some data
6           some data
7           some data
8           some data
9           some data
10          some data

虽然您也可以删除并重新创建 ID 作为身份,但它会丢失其序号位置,因此会丢失临时 id1 列。

关于sql - 在 SQL Server 中循环遍历行并自动为每一行添加一个列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10645879/

相关文章:

sql-server - 如何同时更新和同步数据库表?

sql - 创建存储过程时对象名称无效

.net - Visual Studio 2010 错误 : "Non-invocable member ' Microsoft. SqlServer.Management.Smo.Server.Databases' 不能像方法一样使用。”

php - 如何在phpMyAdmin中添加md5函数?

sql - SQL中的计算模式

sql - 分区和滑动窗口上的行号

c# - 使用 NLog 事件上下文布局渲染器以 ms 精度记录日期时间

Sql查询获取json结果中没有列名的数组

sql - 如何从 Postgres 中的其他两行生成新行?

sql - 删除 LOB 不会减少 Hibernate H2 DB 大小