Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server GetUTCDate作为默认值无效_Sql Server_Database_Tsql_Datetime - Fatal编程技术网

Sql server SQL Server GetUTCDate作为默认值无效

Sql server SQL Server GetUTCDate作为默认值无效,sql-server,database,tsql,datetime,Sql Server,Database,Tsql,Datetime,使用Microsoft SQL Server,我希望列在默认情况下具有当前UTC日期和时间。当插入一行且未为该列指定值时,它应默认为服务器上的UTC日期 我使用以下内容创建表: CREATE TABLE [dbo].[Status] ( [ProcessNam] [varchar](30) NOT NULL, [LastCheckIn] [datetime2] NOT NULL DEFAULT GETUTCDATE(), [Failures] [tinyint] NOT

使用Microsoft SQL Server,我希望列在默认情况下具有当前UTC日期和时间。当插入一行且未为该列指定值时,它应默认为服务器上的UTC日期

我使用以下内容创建表:

CREATE TABLE [dbo].[Status]
(
    [ProcessNam] [varchar](30) NOT NULL,
    [LastCheckIn] [datetime2] NOT NULL DEFAULT GETUTCDATE(),
    [Failures] [tinyint] NOT NULL DEFAULT ((0)),

    CONSTRAINT [PK_AST_PING] 
      PRIMARY KEY CLUSTERED ([ProcessNam] ASC)
          WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
                IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
                ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
但当我使用:

INSERT INTO dbo.Status VALUES ('TEST', '', '')
该列最后包含
1900-01-01 00:00:00.000000

如果我使用

SELECT GETUTCDATE()
返回正确的时间戳。

您正在插入“”(空字符串)作为LastCheckIn值,因此不使用默认值。试试这个

INSERT INTO DBO.STATUS (ProcessNam) VALUES ('TEST')

由于DateTimes的解析方式,''相当于0(零),并且由于DateTimes的存储方式,0等于1900-01-01 00:00:00.000000。

不同于
NULL
您在
插入中提供了一个值-一个空字符串-这就是为什么不使用默认值的原因。您应该明确列出要在其中插入值的列-如果您不想在
LastCheckIn
中插入任何内容,则不要将其包含在要插入值的列列表中-在这种情况下,默认值将用在标题中。令人震惊的是,一个空字符串似乎被解析为1900-01-01。@usr它有点不正确-它被解析为0。将1900-01-01转换为日期时间(自1900-01-01以来的天数)。您还可以使用
插入DBO.STATUS值('TEST',default,default)
@Aツ 我建议不要这样做——你存了什么?输入列名?为什么@Aaron_Bertrand问题的主题不是缺少的列名,而是插入一些默认值。当然,我最好把它们都列出来,但这不是主题。