问题描述
我正在寻找一种简单的清理方法来获取 MS Access sql 中的序列 {1,2,3,4,5,6,7,...,1000000}。我想创建一个包含从 1 到 100000 的列的表,但是效率很低。
有没有办法在 MS Access 中使用 sql 生成数字 1 到 10000000?
我尝试了 GENERATE_SERIES()
函数,但 MS Access sql 不支持此函数。
id | number
------------
1. | 1
2. | 2
3. | 3
4. | 4
5. | 5
6. | 6
7. | 7
8. | 8
解决方法
是的,而且并不痛苦 - 使用笛卡尔查询。
首先,创建一个返回 10 条记录的小查询:
SELECT
DISTINCT Abs([id] Mod 10) AS N
FROM
MSysObjects;
另存为 Ten
。
然后运行这个简单的查询:
SELECT
[Ten_0].[N]+[Ten_1].[N]*10+[Ten_2].[N]*100+[Ten_3].[N]*1000+[Ten_4].[N]*10000+[Ten_5].[N]*100000 AS Id
FROM
Ten AS Ten_0,Ten AS Ten_1,Ten AS Ten_2,Ten AS Ten_3,Ten AS Ten_4,Ten AS Ten_5
在两秒钟内,将返回从 0 到 999999 的 Id。
,非常痛苦,但您可以执行以下操作:
create table numbers (
id int autoincrement,number int
);
-- 1 row
insert into numbers (number) values (1);
-- 2 rows
insert into numbers (number) select number from numbers;
-- 4 rows
insert into numbers (number) select number from numbers;
-- 8 rows
insert into numbers (number) select number from numbers;
-- repeat a total of 20 times
number
的值始终为 1
,但 id
会递增。您可以使用 update
:
update numbers
set number = id;
,
如果这是 SQL 服务器,您可以使用递归 CTE 来执行此操作。
WITH number
AS
(
SELECT num = 1
UNION ALL
SELECT num + 1
from number
where num < 1000000
)
SELECT num FROM number
option(maxrecursion 0)
但是你问的是MS Access,因为access不支持递归CTE,你可以试试用宏来做,然后插入到表中读出?