【发布时间】:2013-11-17 20:42:04
【问题描述】:
我正在尝试从表中随机选择一行。我很好奇为什么下面的两个语句不起作用:
select LastName from DataGeneratorNameLast where id = (ABS(CHECKSUM(NewId())) % 3)+1
select LastName from DataGeneratorNameLast where id = cast(Ceiling(RAND(convert(varbinary, newid())) *4) as int)
两个语句都随机返回 1 行、无行或多行。对于我的生活,我无法弄清楚为什么。只在查询中添加前 1 只解决了多行的问题 - 但不能解决没有返回行的问题。
是的,我可以通过选择 top 1 并按 newid() 排序来做同样的事情。但是为什么这不起作用的奥秘让我发疯了。
思考为什么我会返回多行?
这是我用来选择的表格:
Create Table dbo.DataGeneratorNameLast
(
[Id] [int] IDENTITY(1,1) NOT NULL,
LastName varchar(50) NOT NULL,
)
Go
insert into DataGeneratorNameLast (LastName) values ('SMITH')
insert into DataGeneratorNameLast (LastName) values ('JOHNSON')
insert into DataGeneratorNameLast (LastName) values ('Booger')
insert into DataGeneratorNameLast (LastName) values ('Tiger')
【问题讨论】:
标签: sql sql-server tsql random