MS Access 2007: добавить поле AUTOINCREMENT из запроса MAKE TABLE - PullRequest
3 голосов
/ 07 февраля 2012

Я создаю таблицу T2 из существующей таблицы T1, используя тип запроса MAKE TABLE, и мне нужно добавить автоинкрементное поле в качестве первичного ключа для новой таблицы T2.

Мне интересноSQL требуется.Например:

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

Комментарий AUTOINCREMENT(1, 1) AS ID, конечно, не работает, но я подозревал, что это может сработать, и я использую его только в иллюстративных целях, чтобы показать, что я пытаюсь сделать.

Обратите внимание, что я не могу изменить таблицу после ее создания с помощью инструкции ALTER TABLE, мне нужно создать поле AUTOINCREMENT (и заполнить его) на лету, когда T2 создается из T1.

Ответы [ 2 ]

3 голосов
/ 08 февраля 2012

В комментарии вы сказали, что «запрос запускается, когда открывается БД, поскольку форма открывается для пользовательского ввода. Полагаю, я мог бы создать макрос для выполнения запроса MAKE TABLE, а затем другой запрос ALTER TABLE, если мне нужно».

Вместо того, чтобы воссоздавать T2 каждый раз, может быть проще создать T2 один раз, а затем очищать его содержимое каждый раз перед добавлением из T1.Чтобы отбросить строки из T2:

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

Если вы хотите сбросить автономный номер на 1 для столбца ID, вы можете использовать инструкцию 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

Просто оставьте столбец идентификатора вне списков полей и позвольте автонумерации справиться с этим.При желании вы можете контролировать порядок добавления строк T1 с помощью ORDER BY в части SELECT этого оператора.

Я использовал ADO (CurrentProject.Connection) для выполнения всех трех из этих операторов.Однако первое и третье операторы должны работать в DAO, если вы предпочитаете.Но этот оператор ALTER TABLE должен выполняться из ADO.

0 голосов
/ 29 сентября 2012

Это просто так ....

Select Name,
    (SELECT COUNT(*)
     FROM Person pp 
     WHERE pp.ID<=Person.ID) AS serialNo
FROM Person
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...