Microsoft Access DateTime по умолчанию теперь через SQL - PullRequest
7 голосов
/ 10 июня 2009

Я пишу несколько сценариев для обновления многочисленных таблиц доступа. Я хотел бы добавить столбец к каждому, у которого есть поле с именем «date_created», которое является отметкой времени, когда создается запись. Сделать это через табличное представление просто, просто установите DefaultValue = now (). Тем не менее, как бы я сделать это в SQL?

Это моя текущая попытка для таблиц, в которых уже есть столбец. Этот пример использует "tblLogs".

ALTER TABLE tblLogs ALTER COLUMN date_created DEFAULT now()

Спасибо за вашу помощь!

Обновление - есть ли способ сделать это в VBA?

Обновление 2 - проверено все ответы и последующие ответы на один день, когда это самый короткий и самый точный

CurrentProject.Connection.Execute _
    "ALTER TABLE tblLogs ALTER date_created DATETIME DEFAULT NOW() NOT NULL;"

Ответы [ 4 ]

7 голосов
/ 10 июня 2009

Я предполагаю:

  • вашей целевой базой данных является ядро ​​ACE или Jet, а не SQL Server;
  • вы хотите указать дату и , то есть то, что известно как CURRENT_TIMESTAMP в стандартном SQL (хотя и не поддерживается напрямую ACE / Jet) и не следует путать с типом данных SQL Server TIMESTAMP ; * +1010 *
  • вы хотите получить ответ, используя SQL DDL.

Если вы создали свою таблицу, используя этот SQL DDL:

CREATE TABLE tblLogs 
(
   date_created DATETIME NOT NULL
);

тогда следующий SQL DDL добавит DEFAULT ваше требование:

ALTER TABLE tblLogs ALTER 
   date_created DATETIME DEFAULT NOW() NOT NULL;

Приведенный выше синтаксис ACE / Jet SQL соответствует ANSI-92 Query Mode. Чтобы использовать это через интерфейс MS Access (например, представление SQL объекта запроса), см. Microsoft Office Access: О режиме запроса ANSI SQL (MDB) . Для этого программно с помощью SQL DDL требуется (AFAIK) использование OLE DB, а в VBA (AFAIK) - использование ADO. DAO всегда использует синтаксис режима запросов ANSI-89, в синтаксисе SQL DDL которого отсутствует поддержка DEFAULT.

Если вы используете Access (а не автономный ACE / Jet), вы можете использовать одну строку кода VBA (ADO):

CurrentProject.Connection.Execute "ALTER TABLE tblLogs ALTER date_created DATETIME DEFAULT NOW() NOT NULL;"
2 голосов
/ 10 июня 2009

Вместо now () вы можете использовать getdate (). Не могу проверить другую часть синтаксиса (здесь нет sql и я редко меняю таблицы :)), но должно быть примерно так же.

редактирование: Кажется, что SQL не позволяет изменить значения по умолчанию так легко. Посмотрите эту страницу , где представлен практический пример - вам нужно изменить ограничения, потому что MSSQL рассматривает значения по умолчанию как ограничения. Извините за дезинформацию.

0 голосов
/ 10 июня 2009

Я предлагаю, чтобы для создания или реструктуризации таблиц Jet вы использовали DAO вместо DDL. Он предлагает возможность управления свойствами, отсутствующими в реализации DDL в Jet. Помощь Access должна предоставить вам то, что вам нужно для этого.

0 голосов
/ 10 июня 2009

В SQL Server это будет:

ALTER TABLE tblLogs ALTER COLUMN date_created DEFAULT getDate ()

...