我们有.mdb文件,包含数百个表:Lesson1,Lesson2,Lesson3,Lesson4等.所有表都具有相同的结构:
Lesson<n>
----------------
slide_id
name
description
status
created_date
created_by
updated_date
updated_by
Run Code Online (Sandbox Code Playgroud)
什么SQL语句会生成如下结果:
| table_name | slide_id | name |
|-----------------------|-------------------------------|
| Lesson1 | 1 | name for slide 1 of lesson 1 |
| Lesson1 | 2 | name for slide 2 of lesson 1 |
| Lesson2 | 1 | name for slide 1 of lesson 2 |
| Lesson2 | 2 | whatever |
| Lesson2 | 3 | again whatever |
Run Code Online (Sandbox Code Playgroud)
等等
所以这里有几点:
如果表名已知,则可以创建如下查询:
SELECT 'Lesson1' AS table_name, slide_id, name, ... FROM Lesson1
UNION ALL SELECT 'Lesson2', slide_id, name, ... FROM Lesson2
UNION ALL SELECT 'Lesson3', slide_id, name, ... FROM Lesson3
UNION ALL SELECT 'Lesson4', slide_id, name, ... FROM Lesson4
UNION ALL SELECT 'Lesson5', slide_id, name, ... FROM Lesson5
Run Code Online (Sandbox Code Playgroud)
只有当表的数量不断变化时才需要游标.如果没有,这应该可以解决问题.
提示:要生成初始查询,请在Excel中粘贴表的名称,并在下一个单元格中使用公式来创建该表的"UNION ALL"语句.然后直接复制并粘贴回Access.(或者使用游标动态创建它,但复制/粘贴和快速公式很容易,您可以保存excel文件,以防您需要批量添加表,更改选定的列等)
而且,显然,最终解决方案应该是在可能的情况下合并表,并在查询时添加一个鉴别器字段.哎呀,如果必须的话,可以更容易地维护数百个查询,每个查询都拉一个课程的行(再次,Excel可以是一个方便的批量更新工具),而不是数百个必须具有相同结构的课程表.