2015-03-16 4 views
1

Использование Microsoft SQL Server Я хочу, чтобы столбец имел текущую дату и время UTC по умолчанию. Когда строка вставлена ​​и значение не указано для этого столбца, оно должно по умолчанию указывать дату UTC на сервере.SQL Server GetUTCDate недействителен по умолчанию

создать таблицу:

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() 

Th Правильная временная метка возвращается.

+4

'' '' отличается от 'NULL' – Lamak

+2

Вы предоставляете значение в' INSERT' - пустую строку - поэтому значение по умолчанию не используется. Вы должны ** явно указать ** те столбцы, в которые вы хотите вставить значения, - и если вы не хотите вставлять что-либо в 'LastCheckIn', тогда не включайте его в список столбцов, в которые вы вставляете значения, в этом случае вместо этого будет использоваться значение по умолчанию –

ответ

3

Вы вставляете '' (пустую строку) в качестве значения LastCheckIn, поэтому значение по умолчанию не используется. Попробуйте это вместо этого;

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

Из-за способа DateTimes разобраны, «» эквивалентно 0 (ноль), и из-за способа DateTimes сохраняются, 0 равно 1900-01-01 00: 00: 00,000000.

+0

Ужасно, что пустая строка, по-видимому, анализируется 1900-01-01. – usr

+2

@usr Это своего рода нет - он разобран как 0. Что означает 1900-01-01 как datetime (количество дней с 1900-01-01). –

+0

вы также можете использовать 'INSERT INTO DBO.STATUS VALUES ('TEST', по умолчанию, по умолчанию)' –

Смежные вопросы