【问题标题】:How to update 4 000 000 random numbers of records in SQL Server如何在 SQL Server 中更新 4 000 000 个随机记录数
【发布时间】:2021-04-15 07:49:52
【问题描述】:

我总共有 1000 万行,我想用一些值更新随机记录。

我想用Datakey = 1 更新400 万个随机行,用Datakey = 2 更新接下来的400 万个随机行,用Datakey = 3 更新最后200 万行。

我尝试学习一些功能,例如Rand(),我想在我的请求中使用它,但我做不到。我只能使用前 400 万个来更改它们,但我想要随机记录而不是前 400 万个。

这是我的 SQL 语句:

update top (4 000 000) [FACT_INTERNATIONAL]  
set [DateKey] = 2  

但我想要随机的 4 000 000 而不是顶部。我正在使用 SQL Server 2017。

【问题讨论】:

    标签: sql sql-server random sql-update


    【解决方案1】:

    你可以使用row_number():

    with toupdate as (
          select t.*, row_number() over (order by newid()) as seqnum
          from t
         )
    update toupdate
        set datekey = (case when seqnum <= 4000000 then 1
                            when seqnum <= 8000000 then 2
                            else 3
                       end);
    

    注意:更新 10,000,000 条记录是一项昂贵的操作,因此这可能需要很长时间。创建一个复制现有数据的新表通常更有效。但是,您的问题与性能无关。

    【讨论】:

      【解决方案2】:

      您可以像这样在ORDER BY 中使用NEWID()

      UPDATE  X
      SET [DateKey] = 2
      FROM (SELECT TOP (4000000) *
            FROM [FACT_INTERNATIONAL] AS X
            ORDER BY NEWID()) AS X
      

      400万条记录更新成本太高,过一段时间sql可能会报错。在我看来,尝试使用更少的记录。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-01
        • 2021-06-26
        • 1970-01-01
        • 2018-11-14
        • 2020-10-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多