Не может быть сделано с использованием столбца DEFAULT
.
Вы можете создать вспомогательную процедуру для генерации даты, например, (Access Database Engine Режим запросов ANSI-92 синтаксис):
CREATE PROCEDURE AddOrderWithDefaultDate
(
arg_OrderID INTEGER,
arg_CustomerID NVARCHAR(5),
arg_EmployeeID INTEGER
)
AS
INSERT INTO Orders (OrderID, CustomerID, EmployeeID, OrderDate)
SELECT DISTINCT arg_OrderID, arg_CustomerID, arg_EmployeeID,
DATE()
+ TIMESERIAL(
IIF(DATEPART('H', NOW()) = 0, 1, DATEPART('H', NOW())),
IIF(DATEPART('N', NOW()) = 0, 1, DATEPART('N', NOW())),
IIF(DATEPART('N', NOW()) = 0, 1, DATEPART('S', NOW()))
) AS OrderDate
FROM Products;
До версии ACE (2007) Access Database Engine вы могли удалить привилегии INSERT
и UPDATE
из таблицы и предоставить вашим вспомогательным процедурам.
Кроме того, необходимо добавить в столбец ограничение или правило проверки CHECK
, чтобы гарантировать, что столбец не будет явно вставлен или обновлен с использованием недопустимого значения. Да, вам это нужно, даже если права принадлежат только вашим «вспомогательным» функциям, если вы не являетесь мифическим программистом, который пишет только код без ошибок;)
Но, честно говоря, зачем? Похоже, проблема в том, что ваша бизнес-логика не может обрабатывать нули в значениях DATETIME
. Не просто лечить симптомы: вылечить болезнь и исправить неисправную логику,