我正在使用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字段(并填充它)。
答案 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