I set up a table yesterday with the following code. the code ran with no error messages reported and the table appeared correctly set up in object explorer.
Create Table PriceTable
(Airport_IACO_Code Varchar (4) NOT NULL,
Airline_IACO_Code Varchar (3) NOT NULL,
FlightDate Date NOT NULL Default Getdate(),
DepTime Time NOT NULL Default DATEADD(hour, 6, GETDATE()),
Price Smallmoney,
RouteDiscontinuedOrCommences Varchar (15),
)
GO
However on checking the table today the FlightDate
which has the Getdate()
default is showing yesterdays date
and
the the DepTime column which has the DateAdd
Default is showing an incorrect time of 18:45:02. the current time as I am writing this is 11.04.
Does anyone know what is wrong.
Thanks in advance for any help offered.
You may find the handling of defaults a bit counter-intuitive in SQL Server. The syntax is:
It so happens that SQL Server extends the definition of
constant_expression
to include non-deterministic scalar functions, such asgetdate()
. These are functions that return a different value each time they are called, even with the same arguments. The definition in the documentation is:However, SQL Server does not extend the definition to expressions of such functions. Instead, the expression is evaluated when the table is created and a constant value is inserted.
Unfortunately, one way to accomplish what you want is using a trigger. Alternatively, you could leave the value as
NULL
and create a computed column to calculate the date six hours hence: