【发布时间】:2015-03-16 16:31:21
【问题描述】:
使用 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()
返回正确的时间戳。
【问题讨论】:
-
''不同于NULL -
您在
INSERT中提供了一个值——一个空字符串——这就是为什么不使用默认值的原因。您应该明确列出您想要插入值的列 - 如果您不想在LastCheckIn中插入任何内容,则不要将其包含在您要插入的列列表中values into - 在这种情况下,将使用默认值来代替
标签: sql-server database tsql datetime