加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 如何随机更新行?

发布时间:2020-12-12 08:44:00 所属栏目:MsSql教程 来源:网络整理
导读:我想通过一张桌子,随机擦掉一些数据.我正在做一些数据随机化,将真正的名字变成假的等等.所涉及的一个表中有一列在大约40%的时间内为空.当我分配新的名字时,我的名字随机应用程序可以在其中的一个地方投掷硬币.但是我最好只是做到这一点:随机修剪一些数据.
我想通过一张桌子,随机擦掉一些数据.我正在做一些数据随机化,将真正的名字变成假的等等.所涉及的一个表中有一列在大约40%的时间内为空.当我分配新的名字时,我的名字随机应用程序可以在其中的一个地方投掷硬币.但是我最好只是做到这一点:随机修剪一些数据.

我有这个代码,这不行,但肯定看起来应该对我来说:

Use MyDb
go 

CREATE VIEW vRandNumber 
AS 
SELECT RAND() as RandNumber 

go  

CREATE FUNCTION RandNumber() 
RETURNS float 
AS 
  BEGIN 
  RETURN (SELECT RandNumber FROM vRandNumber) 
  END 

go  

select dbo.RandNumber()

update names set nickname = null 
where ((select dbo.RandNumber()) > 0.5)

当我运行RandNumber函数的时候很好,很随机.但是当我做更新时,它会更新所有行的一半时间,没有一行的另一半时间.

我希望它每次运行脚本时更新一个随机数.我真的认为像RandNumber这样的函数会对表中的每一行运行一次.显然不是.

这是不是没有循环,没有控制台应用程序?

编辑:我也尝试了几个RAND()的变体,直接在那里得到相同的结果.

解决方法

假设您的Names表有一个主键字段称为Id,这将使随机的50%行中的昵称无效:
update dbo.Names set Nickname = null where Id in
(
    select top 50 percent id from dbo.Names order by NEWID()
)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读