我有一个包含一些表的小型访问数据库。我正在尝试访问sql设计中的代码。我只是想在表格中随机选择一条记录。
我创建了一个名为StateAbbreviation
的简单表。它有两列:ID
和Abbreviation
。 ID
只是一个自动编号,Abbreviation
是状态的不同缩写。
我在这里看到this帖子。所以我试过
SELECT Abbreviation
FROM STATEABBREVIATION
ORDER BY RAND()
LIMIT 1;
我在查询表达式RAND() LIMIT 1
中收到错误语法错误(缺少运算符)。所以我累了RANDOM()
而不是RAND()
。同样的错误。
其他人都没有工作。我究竟做错了什么?谢谢。
答案 0 :(得分:3)
Ypercude提供的链接让我得到了正确答案:
SELECT TOP 1 ABBREVIATION
FROM STATEABBREVIATION
ORDER BY RND(ID);
请注意,对于RND(),我认为它必须是整数值/变量。
答案 1 :(得分:1)
每次打开Access并运行查询时,都需要变量和时间种子才能获得相同的序列 - 并使用在Access中访问SQL :
SELECT TOP 1 Abbreviation
FROM STATEABBREVIATION
ORDER BY Rnd(-Timer()*[ID]);
其中ID是表的主键。
答案 2 :(得分:0)
试试这个:
SELECT TOP 1 *
FROM tbl_name
ORDER BY NEWID()
当然,这可能需要考虑大型表的性能。
答案 3 :(得分:0)
请试试这个,对你有帮助
可以使用我创建的存储过程和函数,它有一个额外的列,您可以在表格中创建FLAG名称和列,所有字段值应为0然后它可以工作
create Procedure proc_randomprimarykeynumber
as
declare @Primarykeyid int
select top 1
@Primarykeyid = u.ID
from
StateAbbreviation u
left join
StateAbbreviation v on u.ID = v.ID + 1
where
v.flag = 1
if(@Primarykeyid is null )
begin
UPDATE StateAbbreviation
SET flag = 0
UPDATE StateAbbreviation
SET flag = 1
WHERE ID IN (SELECT TOP 1 ID
FROM dbo.StateAbbreviation)
END
ELSE
BEGIN
UPDATE StateAbbreviation
SET flag = 0
UPDATE StateAbbreviation
SET flag = 1
WHERE ID IN (@Primarykeyid)
END
SET @Primarykeyid = 1
SELECT TOP 1
ID, Abbreviation
FROM
StateAbbreviation
WHERE
flag = 1
在存储过程中运行此命令并获得串行主键
exec proc_randomprimarykeynumber
谢谢并尊重