TSQL-基于第二个表中两个整数之间的值进行更新。
对数百万行进行大规模更新时遇到问题。下面是我尝试做的示例。尽可能避免案例陈述,因为有1000多个等级 表1:TSQL-基于第二个表中两个整数之间的值进行更新。,sql,tsql,ssms,Sql,Tsql,Ssms,对数百万行进行大规模更新时遇到问题。下面是我尝试做的示例。尽可能避免案例陈述,因为有1000多个等级 表1: id, score, rank 1 4090 null 2 6400 null 3 8905 null 4 2551 null 表2: Rank, Score 1 0 2 1000 3 3500 4 5000 5 8000 6 10000 我正在尝试更新表1以显示正确的排名。 例
id, score, rank
1 4090 null
2 6400 null
3 8905 null
4 2551 null
表2:
Rank, Score
1 0
2 1000
3 3500
4 5000
5 8000
6 10000
我正在尝试更新表1以显示正确的排名。
例:得分为6400的ID 2将高于5000,但低于8000,因此排名4。如果没有案例陈述,这可能吗 您可以使用交叉应用:
对于数百万行,我建议采用以下方法之一:
分批更新。
使用案例陈述。
将输出放入新表中,截断原始表,然后重新加载
数百万次更新通常是一项非常昂贵的操作。您可以使用交叉应用:
对于数百万行,我建议采用以下方法之一:
分批更新。
使用案例陈述。
将输出放入新表中,截断原始表,然后重新加载
数以百万计的更新通常是一项非常昂贵的操作。另一个选项是与Lead配合使用的简单连接 范例
另一个选项是与Lead配合使用的简单连接 范例
这似乎对我有用。明天我会做更多的抽查。在这些补丁中,我们会破坏环境。谢谢你的帮助!这似乎对我有用。明天我会做更多的抽查。在这些补丁中,我们会破坏环境。谢谢你的帮助!
update t1
set rank = t2.rank
from table1 t1 cross apply
(select top 1 t2.*
from table2 t2
where t2.score <= t1.score
order by t2.score desc
) t2;
Update Table1 Set Rank=B.Rank
From Table1 A
Join (
Select Rank
,R1=Score
,R2=Lead(Score,1,999999) over (Order By Score)
From Table2
) B on A.score >= B.R1 and A.Score < B.R2
id score rank
1 4090 3
2 6400 4
3 8905 5
4 2551 2