将表的列更新为序列

Posted

技术标签:

【中文标题】将表的列更新为序列【英文标题】:Update a column of a table to be a sequence 【发布时间】:2009-06-23 00:51:47 【问题描述】:

我想使用存储过程的结果更新表的列

create procedure seq
as
DECLARE @NextValue INT;
INSERT SequencesTable DEFAULT VALUES;
DELETE SequencesTable WITH(READPAST); 
SELECT SCOPE_IDENTITY();
go

我不能使用 UDF,因为它是 nodeterministic。这样的东西是行不通的

UPDATE [dbo].[t1]     SET [c1] = seq

我感觉我的方法不对。

我只想更新一个看起来像这样的表

1 1 2 2 1 4 1 4 5 5 1 2

看起来像这样

1 1 2 2 3 4 4 4 5 5 6 2

【问题讨论】:

这是在 SQL2000、2005 还是 2008 上? 【参考方案1】:

试试这样的:

update a set c1 = c1_new
from (
  select 
    c1, c2
  , c1_new = row_number() over (order by nullif(c1,c1))
  from dbo.t1
  ) a

玩弄内部查询,直到你得到你喜欢的东西,然后应用更新。

NULLIF(c1,c1) 尝试保留磁盘上的原始顺序。它总是返回 null。

【讨论】:

以上是关于将表的列更新为序列的主要内容,如果未能解决你的问题,请参考以下文章

将表的列复制到另一个表SQL

项目中使用oracle序列

MySQL更新列的序列号按具有相同值的字段分组

使用 where 和 order by 子句从 1 更新序列号的列

如何根据PostgreSQL中同一行的两个不同列更新具有唯一序列号的列?

JPQL/HSQL 更新有限制?