gpt4 book ai didi

sql - 如何随机更新行?

转载 作者:行者123 更新时间:2023-12-04 00:08:20 26 4
gpt4 key购买 nike

我想通过一张表随机清除一些数据。我正在做一些数据随机化,将真实名字变成假名字等。其中一个涉及的表有一个大约 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 这样的函数会为表中的每一行运行一次。显然不是。

这是否可能没有循环且没有控制台应用程序?

编辑:我还直接在 where 中尝试了 RAND() 的几个变体并得到了相同的结果。

最佳答案

假设您的 Names 表有一个名为 Id 的主键字段,这将使随机 50% 的行中的昵称无效:

update dbo.Names set Nickname = null where Id in
(
select top 50 percent id from dbo.Names order by NEWID()
)

关于sql - 如何随机更新行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2380514/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com