TSQL-基于第二个表中两个整数之间的值进行更新。

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以显示正确的排名。 例

对数百万行进行大规模更新时遇到问题。下面是我尝试做的示例。尽可能避免案例陈述,因为有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以显示正确的排名。 例:得分为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