经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
【SQL】从待选项中随机选一个
来源:cnblogs  作者:ahdung  时间:2019/6/5 9:39:09  对本文有异议

由于SQL Server没有数组类型,所以在面对“从若干待选项中选一个”这种需求时,往往要采取变通办法,比如弄个‘a|b|c’这样的字符串然后对字符串进行处理;又或者把待选项塞进一个临时表,然后把问题变成如何select的问题。下面的写法就是采用后一种,只不过得益于VALUES和CTE,我们不必真的一板一眼的去弄个临时表或表变量什么的,可以让代码更加紧凑,不至于那么冗杂。

写法1:

  1. DECLARE @choice INT = (
  2. SELECT Amount FROM (VALUES
  3. ( 88, 0)
  4. ,(118, 1)
  5. ,(138, 2)
  6. ,(188, 3) --缺点1:需要手动编号,有弄错的可能
  7. ) AS a(Amount,RowNo)
  8. WHERE RowNo = FLOOR(4*RAND())) --缺点2:需要手动指定待选项数目,有弄错的可能

写法2:

WITH前加分号是一种保险的写法,否则可能遇到消息336的语法问题。

  1. DECLARE @choice INT
  2. ;WITH cte AS (SELECT ROW_NUMBER() OVER(ORDER BY Num) AS RowNo,Num FROM (VALUES
  3. (88)
  4. ,(118)
  5. ,(138)
  6. ,(188)
  7. ) AS a(Num))
  8. SELECT @choice=Num FROM cte WHERE RowNo=CEILING((SELECT COUNT(1) FROM cte)*RAND())

求更好写法,感谢。

-EOF-

原文链接:http://www.cnblogs.com/ahdung/p/10977640.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号