栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

随机选择并不总是返回单行

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

随机选择并不总是返回单行

发生这种情况的原因是因为NEWID()为表中的每一行提供了不同的值。对于每一行, 独立于其他行
,有五分之一的机会将其返回。因此,就目前而言,实际上所有5行返回的概率为3125分之一!

要查看此信息,请运行以下查询。您会看到每一行都有一个不同的ID。

SELECt  * , NEWID()FROM    @Table

这将修复您的代码:

DECLARE @Id intSET @Id = ABS(CHECKSUM(NEWID())) % 5 + 1SELECt  * FROM    @Table  WHERe   ID = @Id

但是,我不确定这是从表中选择单个随机行的最有效方法。

您可能会发现此MSDN文章很有用:http :
//msdn.microsoft.com/zh-cn/library/Aa175776(T-SQL中的随机抽样)

编辑1 :现在我考虑一下, 假设行数保持固定并且ID保证是连续的 ,这可能是最有效的方法。

编辑2 :当用作子查询时,要获得所需的结果,请使用TOP 1,如下所示:

SELECt  t.ID         , FK1 = (SELECT TOP 1 FK1 FROM @Table ORDER BY NEWID()) FROM    @Table t


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/574889.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号