0

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

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

4

1 回答 1

4

尝试这样的事情:

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。

于 2009-06-23T00:56:15.080 回答