Ограничение временной таблицы по умолчанию для ValidFrom не работает

У меня есть эта конкретная проблема. Я использую Microsoft SQL Server Management Studio (13.0.16000.28) и хочу создать темпоральную таблицу Price. Я хочу установить для столбца «ValidFrom» значение по умолчанию, например «1900-01-01 00:00:00». Код, который я запускаю,

CREATE TABLE [DWH_STORE].[dbo].[Price] (
  ID int,
  ProdName nvarchar(40),
  Price int,
  ValidFrom datetime2(0) GENERATED ALWAYS AS ROW START CONSTRAINT DF_ValidFrom DEFAULT '1900-01-01 00:00:00' NOT NULL,
  ValidTo datetime2(0) GENERATED ALWAYS AS ROW END NOT NULL,
          PERIOD FOR SYSTEM_TIME ( ValidFrom, ValidTo),
  CONSTRAINT PK_ID_ProdName PRIMARY KEY (ID, ProdName)
) WITH ( SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[PriceHistory]));

Однако, когда я вставляю данные в свою таблицу

INSERT INTO [DWH_STORE].[dbo].[Price] (ID, ProdName, Price)
    VALUES (12, 'Banana', 1)`

SELECT * FROM [DWH_STORE].[dbo].[Price]

я получил

результат

со столбцом «Действительно от» как «2017-08-09 11:18:30». Почему я не получаю значение по умолчанию «1900-01-01 00:00:00» для этого столбца, как ожидалось?

Мой Sysdatetime() во время вставки был «2017-08-09 13:18:30».

Я попытался установить DEFAULT как Sysdatetime(), чтобы получить текущую дату и время, и это тоже не работает. Кажется, что если я устанавливаю DEFAULT на что угодно, я всегда получаю один и тот же результат.

Я ценю каждый ответ.


person Peter    schedule 09.08.2017    source источник


Ответы (1)


Я получил столбец «Действительно от» как «2017-08-09 11:18:30». Почему я не получаю значение по умолчанию «1900-01-01 00:00:00» для этого столбца, как ожидалось?

Он работает так, как ожидалось. Ваши предположения ошибочны. Из временных таблиц:

ВСТАВКИ:

При операции INSERT система устанавливает значение столбца SysStartTime равным времени начала текущей транзакции (в часовом поясе UTC) на основе системных часов и присваивает максимальное значение столбцу SysEndTime 9999. -12-31. Это помечает строку как открытую.

person Lukasz Szozda    schedule 09.08.2017
comment
Хорошо, спасибо. Вопрос в том, как я могу добиться того, чтобы значение столбца SysStartTime имело значение ПО УМОЛЧАНИЮ, например «dateadd (dd, (-1), SYSDATETIME ( ))» - вчера?? - person Peter; 09.08.2017
comment
@PeterNagy - если вы хотите контролировать значения даты и времени, вам не нужны темпоральные таблицы с системной версией, что является более полным названием этой функции. - person Damien_The_Unbeliever; 09.08.2017
comment
Спасибо, @Damien_The_Unbeliever. Если я правильно понимаю, это просто из-за ограничения темпоральных таблиц системной версии (независимо от того, я не понимаю, почему можно установить значения по умолчанию для значений даты и времени, если их нельзя использовать) . Что мне следует использовать для управления значениями даты и времени вместо темпоральных таблиц с системной версией? Как насчет использования ключевого слова DEFAULT в INSERT для ValidFrom? - person Peter; 09.08.2017
comment
Возможно, значение по умолчанию для столбца имеет больше смысла в случае ALTER TABLE, если в таблице уже есть данные. - person keuleJ; 18.06.2018