SQL脚本的奇怪问题(未解决)

作者: loaf 分类: IT 发布时间: 2018-09-04 16:38

我想update表中的R1列,数据则从S1列中所有数据集中随机地选一个,所以我这么写:

--将S1列所有的值取出来,编一个序号,放到一个临时表中,然后在序号内产生一个随机数,在本表中将这个随机序号的值填进R1列中。
select distinct Identity(int,1,1) as id,S1 into #tmpA from tableA

declare @maxID int
select @maxID=max(id) from #tmpA

update tableA set r1=(select s1 from #tmpA where id=cast((rand(checksum(newid()))*(@maxID-1)+1) as int))

但是结果却是:

消息 512,级别 16,状态 1,第 4 行
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。

节取其中的代码,发现这句返回的值与预想的不一样:

select id,s1 from #tmpA where id=cast((rand(checksum(newid()))*(2158-1)+1) as int)

按说上面返回的总会是一行,但结果却很随机,有时为空,有时为1行,有时2行或3行。如果返回为空还可以理解是随机数的范围有误,但是返回多行是什么鬼?