Sql 使用Getdate和DateAdd的默认值无效

Sql 使用Getdate和DateAdd的默认值无效,sql,sql-server,sql-server-2014,Sql,Sql Server,Sql Server 2014,我昨天用以下代码设置了一个表。代码运行时未报告任何错误消息,并且在对象资源管理器中正确设置了表 Create Table PriceTable (Airport_IACO_Code Varchar (4) NOT NULL, Airline_IACO_Code Varchar (3) NOT NULL, FlightDate Date NOT NULL Default Getdate(),

我昨天用以下代码设置了一个表。代码运行时未报告任何错误消息,并且在对象资源管理器中正确设置了表

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
但是,在今天检查表时,具有Getdate默认值的FlightDate显示的是昨天的日期

具有DateAdd默认值的DepTime列显示的18:45:02时间不正确。我现在写这篇文章的时间是11点04分

有人知道怎么回事吗


提前感谢您提供的任何帮助

您可能会发现在SQL Server中处理默认值有点违反直觉。语法是:

DEFAULT constant_expression
SQL Server扩展了常量_表达式的定义,以包括非确定性标量函数,例如getdate。这些函数在每次调用时返回不同的值,即使参数相同。报告中的定义是:

只有常量值,如字符串;标量函数 系统、用户定义或CLR函数;或者可以使用NULL 默认情况下

但是,SQL Server没有将定义扩展到此类函数的表达式。而是在创建表并插入常量值时计算表达式

不幸的是,实现所需的一种方法是使用触发器。或者,您可以将该值保留为NULL,并创建一个计算列来计算六小时后的日期:

create table . . .
    _DepTime time,
    DepTime as (cast(dateadd(hour, 6 _DepTime) as time) )

哪个DMB?dateadd和getdate不是ANSI SQL。我不懂QS。对不起,我只是问你正在使用哪个数据库产品。如果您用正在使用的数据库产品标记您的问题,则更容易获得帮助,尤其是在涉及非标准SQL的情况下。@FusionMultiplies,您是否检查了SQL Server实例maschine上的日期和时间?您确实意识到存储在这些列中的日期时间将是插入时的服务器日期时间,对吗?而不是在您查询或选择它们时,对吗?我希望FlightDate列是todays date。这就是我使用getdate的原因。不过,我可以暂时使用计算列column@frustrationmultiplied . . . 把时间和日期分成两列似乎有点尴尬。有人能解释一下下面的代码是如何工作的吗。创建表格_FlightDate日期,FlightDate作为castdateaddhour,6_FlightDate作为日期Gordon你可能是对的。我可以只使用一列作为航班日期和时间如果我这样做了,我将如何设置输入的时间必须至少比当前时间晚6小时。原因是,一些航空公司允许人们在同一天预订和飞行,只要他们的航班距离预订时间6小时