Microsoft Access DateTime по умолчанию теперь через SQL

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

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

ALTER TABLE tblLogs ALTER COLUMN date_created DEFAULT now()

спасибо помогите!

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

обновление 2-протестированы все ответы и следующие onedaywhen является самым коротким и точным

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

4 ответов


Я предполагаю, что:

  • вашей целевой базой данных является ACE или Jet engine, а не SQL Server;
  • вы хотите, чтобы дата и времени, т. е. то, что известно как CURRENT_TIMESTAMP В стандартном SQL (не поддерживается напрямую ACE/Jet, хотя) и не путать с SQL Server TIMESTAMP тип данных;
  • вы хотите получить ответ с помощью 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. Чтобы использовать это через интерфейс 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 standalone), вы можете использовать одну строку кода VBA (ADO):

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

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

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


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

ALTER TABLE TBLLOGS ALTER COLUMN date_created DEFAULT getDate ()


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