jco*_*lum 12 sql sql-server-2008
我想通过一张桌子随机删除一些数据.我正在做一些数据随机化,将真实的名字变成假的等等.其中一个表有一个列,大约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)
Run Code Online (Sandbox Code Playgroud)
当我运行RandNumber函数时它很好,很随机.但是当我进行更新时,它会在一半时间内更新所有行,而在另一半时间内不会更新所有行.
我想让它在每次运行脚本时更新随机行数.我真的以为像RandNumber这样的函数会为表中的每一行运行一次.显然不是.
如果没有循环且没有控制台应用程序,这可能吗?
编辑:我也尝试了RAND()的几种变体直接在哪里得到相同的结果.
Ian*_*son 27
假设您的Names表有一个名为Id的主键字段,这将使随机50%的行中的昵称无效:
update dbo.Names set Nickname = null where Id in
(
select top 50 percent id from dbo.Names order by NEWID()
)
Run Code Online (Sandbox Code Playgroud)