所以我一直在查询中尝试一些SQL随机数生成,我注意到一些奇怪的东西.
假设我运行以下查询:
declare @Random int = CAST(RAND(CHECKSUM(NEWID())) * 5 as INT) + 1;
select CHOOSE(@Random,'One','Two','Three','Four','Five')
Run Code Online (Sandbox Code Playgroud)
SQL随机数gen有点笨重,但这里的基本思路很简单 - 选择1到5之间的随机数,然后将该数字作为文本显示在选择窗口中.这按预期工作.
但是,如果我采用SAME查询,但将随机数公式粘贴到方法中而不是将其声明为整数,那么它就在一行上:
select CHOOSE(CAST(RAND(CHECKSUM(NEWID())) * 5 as INT) +
1,'One','Two','Three','Four','Five')
Run Code Online (Sandbox Code Playgroud)
当我运行查询时,我仍然得到值1到5,但有时我也得到NULL.NULL经常出现,大约五次出现.如果我将两个查询都放入ssms并将它们彼此相邻运行几次,我经常会看到第二个查询的空值,但第一个查询永远不会为NULL.
那为什么呢?这些计算不完全相同吗?我不知道为什么这两个查询会给出不同的结果,但我觉得我可以通过查找来学习有关T-SQL的有用信息.
有谁想开导我的专家?