我试图通过用列表中的新值替换旧值来填充sql中的列。
SELECT CHOOSE(ROUND(RAND() * 3, 1) + 1,'Bill','Steve','Jack')
运行该查询会给我我不想要的NULL实例,为什么我会得到NULL ??
答案 0 :(得分:2)
CHOOSE
只是CASE
表达式的简写。我将讨论如何像here多次评估类似RAND()
的表达式(请参见“表达式可以多次评估”一节)。我也谈到了这个here(在页面上搜索“ RAND()
”)。
基本上,发生的事情是将CHOOSE(expr, a, b)
扩展为:
CASE
WHEN expr = 1 THEN a
WHEN expr = 2 THEN b
ELSE NULL
END
每次您看到expr
时,都可以再次对其进行评估。因此,第一次调用RAND()
时可能会产生2,然后移到下一个WHEN
,而这次可能会产生1,那么剩下的就是NULL
。 >
解决方案是仅生成一次RAND()
,例如
DECLARE @rand tinyint = CONVERT(tinyint, (RAND()*3) + 1);
SELECT CHOOSE(@rand,'Bill','Steve','Jack');