使用 SQL 在 MS Access 中生成数字 1 到 1000000

问题描述

我正在寻找一种简单的清理方法获取 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,你可以试试用宏来做,然后插入到表中读出?