2012-02-07 102 views
3

我正在使用MAKE TABLE查詢類型並使用MAKE TABLE查詢類型從現有表T1創建表T2,並且需要將自動增量字段添加爲新表T2的主鍵。MS Access 2007:從MAKE TABLE查詢中添加AUTOINCREMENT字段

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

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

課程的AUTOINCREMENT(1, 1) AS ID評論不工作,但,這就是我懷疑可能工作和正在使用用於說明目的只是爲了表明我想做的事情。

請注意,在使用ALTER TABLE語句創建表後,我無法更改表,我需要在從T1創建T2時動態創建AUTOINCREMENT字段(並填充它)。

+0

爲什麼你能不能使用alter table? – Fionnuala 2012-02-07 19:35:51

+0

查詢在打開數據庫以打開用於用戶輸入的表單時運行。我想我可以構建一個宏來運行MAKE TABLE查詢,然後運行另一個ALTER TABLE查詢(如果需要的話)。 – 2012-02-07 19:57:21

+0

我認爲你將不得不。你也可以在各種事件中運行代碼。 – Fionnuala 2012-02-07 19:59:45

回答

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下運行。但是,ALTER TABLE語句必須從ADO運行。

+0

+1好回答:) – 2012-02-08 11:10:20

+0

同意,謝謝。 – 2012-02-09 15:24:07

0

很簡單,就是這樣....

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