将表的列更新为序列

发布于 2024-07-25 16:00:50 字数 516 浏览 4 评论 0原文

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

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

我无法使用 UDF,因为它是不确定的。 这样的事情是行不通的,

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

I want to update a table's column using the results of a stored procedure

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

I can't use a UDF since it is nodeterministic. Something like this won't work

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

I have a feeling I am approaching this the wrong way.

I just want to do update a table that looks like this

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

To look like this

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

够运 2024-08-01 16:00:50

尝试这样的操作:

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。

Try something like this:

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

Play around with the inner query until you get something you like, then apply the update.

The NULLIF(c1,c1) attempts to preserve original order on disk. It always returns null.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文