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 ServerTIMESTAMP
тип данных; - вы хотите получить ответ с помощью 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 рассматривает значения по умолчанию как ограничения. Извините за дезинформацию.
Я предлагаю для создания или реструктуризации таблиц Jet использовать DAO вместо DDL. Он предлагает возможность управления свойствами, которые отсутствуют в реализации DDL Jet. Справка Access должна предоставить вам то, что вам нужно.