我想通过一张表并随机清除一些数据。我正在做一些数据随机化,把真正的名字变成伪造的名字等等。所涉及的表中有一列有大约40%的时间空列。我的名字randomizer应用程序可以在它指定新的名字时在它的某个位置投掷硬币。但我宁愿最后这样做:随机删除一些数据。如何随机更新行?
我有这样的代码,这是不行的,但看起来确实像它应该对我说:
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()的变体直接在哪里得到了相同的结果。
您可以使用:WHERE RAND()> 0.5'。不需要视图和功能。 – 2010-03-04 15:40:11
@OMG:尝试过,结果相同。 – jcollum 2010-03-04 15:42:49
10k查看,7 upvotes; smh – jcollum 2017-03-15 16:40:57