所以我一直在查询中尝试一些 SQL 随机数生成,并且我注意到一些奇怪的事情。
假设我运行以下查询:
declare @Random int = CAST(RAND(CHECKSUM(NEWID())) * 5 as INT) + 1;
select CHOOSE(@Random,'One','Two','Three','Four','Five')
SQL 随机数生成有点庞大,但这里的基本思想很简单 - 选择 1 到 5 之间的随机数,然后将该数字作为文本显示到选择窗口。这按预期工作。
但是,如果我采用相同的查询,但将随机数公式粘贴到方法中,而不是将其声明为整数,那么它就全部在一行上:
select CHOOSE(CAST(RAND(CHECKSUM(NEWID())) * 5 as INT) +
1,'One','Two','Three','Four','Five')
当我运行查询时,我仍然得到值 1 到 5,但有时我也会得到 NULL。 NULL 出现的频率很高,大约五分之一。如果我将两个查询放入 ssms 并相邻运行它们几次,我经常会看到第二个查询为空值,但第一个查询永远不会为 NULL。
那么这是为什么呢?这不是完全一样的计算吗?我不知道为什么这两个查询会给出不同的结果,但我觉得通过找出答案我可以学到一些关于 T-SQL 的有用知识。
有高手愿意赐教吗?