MS Access 2007:从MAKE TABLE查询中添加AUTOINCREMENT字段

时间:2012-02-07 18:41:53

标签: database ms-access

我正在使用MAKE TABLE查询类型从现有表T1创建表T2,并且需要将自动增量字段添加为新表T2的主键。

我很好奇所需的SQL。例如:

SELECT AUTOINCREMENT(1, 1) AS ID, T1.*, INTO T2 FROM T1

AUTOINCREMENT(1, 1) AS ID评论当然不起作用,但这是我怀疑可能会起作用的,并且仅用于说明目的,以显示我想要做的事情。

请注意,在使用ALTER TABLE语句创建表后我无法更改表,我需要在从T1创建T2时动态构建AUTOINCREMENT字段(并填充它)。

2 个答案:

答案 0 :(得分:3)

在评论中你说“查询在数据库打开时运行,因为表单会打开以供用户输入。我想我可以构建一个宏来运行MAKE TABLE查询,然后另一个ALTER TABLE查询,如果我需要”。

不是每次都重新创建T2,而是创建T2一次更简单,然后每次在从T1附加之前清空其内容。丢弃T2中的行:

Dim strSql as String
strSql = "DELETE FROM T2;"
CurrentProject.Connection.Execute strSql

如果要将ID列的自动编号重置为1,可以使用ALTER TABLE语句。

strSql = "ALTER TABLE T2 ALTER COLUMN ID COUNTER(1, 1);"
CurrentProject.Connection.Execute strSql

然后将T1的内容添加到T2。

strSql = "INSERT INTO T2 (field1, field2)" & vbCrLf & _
    "SELECT field1, field2 FROM T1;"
CurrentProject.Connection.Execute strSql

只需将ID列留在字段列表之外,让自动编号处理它。如果愿意,您可以控制在该语句的SELECT部分​​中使用ORDER BY添加T1行的顺序。

我使用ADO(CurrentProject.Connection)来执行所有这三个语句。但是,如果您愿意,第一个和第三个语句应该在DAO下正常运行。但是必须从ADO运行ALTER TABLE语句。

答案 1 :(得分:0)

就像那样......

Select Name,
    (SELECT COUNT(*)
     FROM Person pp 
     WHERE pp.ID<=Person.ID) AS serialNo
FROM Person