网站首页 手机版
 注册 登录
您现在的位置: 畅无忧设计 >> 数据库 >> MSSQL >> 正文
最新文章
· SQL Server 2005恢复数据库详细图文教
· 在SQL Server 2005中实现级联删除、级
· SQL Server 里面获得数据库表名称、列
· 查询出某字段值不为空的记录的SQL语句
· 解决SQL Server转ACCESS自动编号问题
· sql重复记录只显示一条记录
· SQL Server 2005处理海量数据
· SQL中把字段的设置为像Access中的自动
· SQL中把字段的默认值设置为当前时间
· SQL数据库备份、还原、转移详解
热门文章
 SQL中把字段的默认值设置为当前时间
 sql重复记录只显示一条记录
 查询出某字段值不为空的记录的SQL语
 SQL Server 2005恢复数据库详细图文
 SQL Server 里面获得数据库表名称、
 SQL Server性能优化入门
 在SQL Server 2005中实现级联删除、
 SQL中把字段的设置为像Access中的自
 SQL Server 2005处理海量数据
 解决SQL Server转ACCESS自动编号问
相关文章
没有相关文章
在SQL Server中使用NewID()产生随机集
来源:珠江在线 更新时间:2009/5/25 17:49:57 阅读次数:
字体:[ ] 我要投稿

  我们团队最近为旅行包组织完成了一个项目,因为这个项目,我们受到了很多客户热情洋溢的感谢信和E-mail。我们将这些赞扬保存在一个称之为Kudos的荣誉表中。

  在网站设计阶段,我们决定利用Kudos表在网站上显示客户的反馈信息。而显示的时候只需要10条记录,但是我们不希望只能显示那固定的几条反馈信息,因为它有些恼人并且需要维护。所以我们选择随机方法挑出10条记录。将在下面给你讲解在SQL Server中如何产生随机集。

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

  useNorthwind

  select rand(), productid, productname from Products

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

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

  select top 10

  rand(productid) as row, productid, productname

  from Products

  order by row

  返回的结果见Listing B.

  不论这个命令运行多少次,虽然随机指派的行返回唯一的值,但是我们的得到的productids数字是10进制的。这个方法还没有起作用。

  但是,这里提供了另外一个更有用的函数:NewID(),它返回一个GUID(全局唯一标志符)。我们看看Rand()函数被NewID()函数代替后的结果怎么样:

  select top 10

  newid() as row, productid, productname

  from Products

  order by row

  运行的结果与Listing C中的结果很相似。

  你的结果有点不同,因为NewID()在每一次调用的时候都产生一个GUID,因此,如果将上面的命令运行2到3次,得到的结果是不同的。

  这个方法是调用NewID()的值作为一列,然后通过NewID()排列这些值。此方法很简单,并且可以应用到不同的场合。例如:你可能需要创建一些有某种特性的产品的列表或随机挑选10个客户或者100个随机挑选出来的订单的详细资料等。

  SQL Server不是设计用于产生随机集的,但是其设计是基于数学而非商学的。幸亏有NewID()函数,我们才能够毫不费力地产生随机数据集。

  我们团队最近为旅行包组织完成了一个项目,因为这个项目,我们受到了很多客户热情洋溢的感谢信和E-mail。我们将这些赞扬保存在一个称之为Kudos的荣誉表中。

  在网站设计阶段,我们决定利用Kudos表在网站上显示客户的反馈信息。而显示的时候只需要10条记录,但是我们不希望只能显示那固定的几条反馈信息,因为它有些恼人并且需要维护。所以我们选择随机方法挑出10条记录。将在下面给你讲解在SQL Server中如何产生随机集。

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

  useNorthwind

  select rand(), productid, productname from Products

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

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

  select top 10

  rand(productid) as row, productid, productname

  from Products

  order by row

  返回的结果见Listing B.

  不论这个命令运行多少次,虽然随机指派的行返回唯一的值,但是我们的得到的productids数字是10进制的。这个方法还没有起作用。

  但是,这里提供了另外一个更有用的函数:NewID(),它返回一个GUID(全局唯一标志符)。我们看看Rand()函数被NewID()函数代替后的结果怎么样:

  select top 10

  newid() as row, productid, productname

  from Products

  order by row

  运行的结果与Listing C中的结果很相似。

  你的结果有点不同,因为NewID()在每一次调用的时候都产生一个GUID,因此,如果将上面的命令运行2到3次,得到的结果是不同的。

  这个方法是调用NewID()的值作为一列,然后通过NewID()排列这些值。此方法很简单,并且可以应用到不同的场合。例如:你可能需要创建一些有某种特性的产品的列表或随机挑选10个客户或者100个随机挑选出来的订单的详细资料等。

  SQL Server不是设计用于产生随机集的,但是其设计是基于数学而非商学的。幸亏有NewID()函数,我们才能够毫不费力地产生随机数据集。

  • 上一篇文章:
  • 下一篇文章:
  • 关于我们 - 联系我们 - 广告服务 - 在线投稿 - 友情链接 - 网站地图 - 版权声明
    CopyRight 2008-2010, CWYDESIGN.COM - 畅无忧设计, Inc. All Rights Reserved
    滇ICP备09005765号