标题: 在SQL-Server中使用NewID()方法产生随机集 (查看:1942 回复:0)
特蓝克斯
版主

数据库技术


现役斑竹  
UID 102607
精华 10
积分 556
帖子 3648
MST币 8594 点    
BST币 556 点    赚取
阅读权限 180
注册 2004-3-7
来自 辽宁沈阳
状态 离线
 
[ 使用道具 ]  
发表于 2006-8-3 11:46  [ 资料 ]  [ 博客 ]  [ 主页 ] [ 短消息 ]  [ 加为好友QQ Yahoo!
爱琴思邮件系统iGENUS V5.0
在SQL-Server中使用NewID()方法产生随机集
本帖发表在我是网管论坛,帖子地址:http://bbs.54master.com/85067,1,1
在网站设计阶段,随机显示10条记录的时候,我们多数是通过外部程序来控制随机数然后做为SQL语句查询的条件的方法来做随机显示10条记录

的操作。我将在下面给你讲解在SQL Server中如何产生随机集,通过这种方式去随机调用数据。

因为你没有这个名叫Dream的库,那我们就选用SQL Server有的Northwind库作为示例。很明显T-SQL函数不能满足这个要求:

use Northwind

select top 10 rand(), productid, productname from Products

这个方法的问题在于Rand()函数在给定命令里所有行都返回相同的值,见下图1。



你可能不需要得到这样的结果,则可以给rand()函数提供一个种子值。在下面的代码中,我们在Rand()函数中给定每一行的productid作为种子值。

select top 10 rand(productid) as row, productid, productname from Products order by row

返回的结果见下图2




不论这个命令运行多少次,虽然随机指派的行返回唯一的值,但是我们的得到的productids数字是10进制的。这个方法还没有起作用。
但是,这里提供了另外一个更有用的函数:NewID(),它返回一个GUID(全局唯一标志符)。我们看看Rand()函数被NewID()函数代替后的结果怎么样:

select top 10 newid() as row, productid, productname from Products order by row

运行的结果与下图2中的结果很相似。见下图3




你的结果有点不同,因为NewID()在每一次调用的时候都产生一个GUID,因此,如果将上面的命令运行2到3次,得到的结果是不同的。
这个方法是调用NewID()的值作为一列,然后通过NewID()排列这些值。此方法很简单,并且可以应用到不同的场合。例如:你可能需要创
建一些有某种特性的产品的列表或随机挑选10个客户或者100个随机挑选出来的订单的详细资料等。
SQL Server不是设计用于产生随机集的,但是其设计是基于数学而非商学的。幸亏有NewID()函数,我们才能够毫不费力地产生随机数据集。

[ 本帖最后由 特蓝克斯 于 2006-8-3 11:49 编辑 ]

[ 点这里复制网址,推荐给你QQ/MSN上的好友们! ]
本站声明:以上内容由网友 特蓝克斯 提供,与54master立场无关!
《我是网管》论坛
-创想社区╄   博客圈:PHP开发团队
〖54ASP设计之旅Ⅰ〗:4714166 (已满) 〖54PHP设计之旅Ⅱ〗:7429484  〖54SQL设计之旅Ⅲ〗:7429318
〖创想网〗ASP技术(未满):18042617
[ 顶部 ]
  
 



当前时区 GMT+8, 现在时间是 2008-9-7 16:03

Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Processed in 0.040912 second(s), 12 queries , Gzip enabled

清除 Cookies - 关于我是网管 - 联系我是网管 - 广告服务 - 诚聘版主 - 无图版 - WAP -