T-SQL "отметка времени" перезаписывает столбец типа данных "rowversion"

Я использую Miscrosoft SQL Server 2012 и потому что в этой статье сказано:

Синтаксис метки времени устарел. Эта функция будет удалена в следующей версии Microsoft SQL Server. Избегайте использования этой функции в новых разработках и планируйте модифицировать приложения, которые в настоящее время используют эту функцию.

Я решил использовать столбец "rowversion" вместо столбца "timestamp". Итак, я создал следующую таблицу:

CREATE TABLE [dbo].[TestTable]
(
     [Col001] [INT] NOT NULL
    ,[Col002] [CHAR](2) NOT NULL
     ...
    ,[Col00N]  [DATETIME2] NOT NULL
    ,[RowVersionID] [ROWVERSION] NOT NULL
    ,CONSTRAINT [PK_ProtoSurveyGlobalizationChanges_RowVersionID] PRIMARY KEY CLUSTERED 
     (
        [RowVersionID] ASC
     )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY]

И все выглядело хорошо, пока я не нажал комбинацию "ALT+F1", которая дает мне информацию о моей таблице (например, сведения о столбцах), и я увидел, что столбец "RowVersionID" помечен с типом "метка времени".

Следующее, что я сделал, было "удалить и создать свою таблицу" с помощью SQL Server Management Studio 2012, и "сгенерированный SQL" изменяет мой исходный запрос следующим образом:

[RowVersionID] [timestamp] NOT NULL

Почему сервер не использует тип, который я установил изначально, и почему в статье мне не рекомендуется использовать метку времени, а сервер каким-то образом выбирает ее?

2 ответа

Решение

Это синонимы, и сервер не может сказать (после создания таблицы), какое слово вы фактически использовали для создания таблицы.

Очевидно, где-то глубоко в глубине, новости, которые timestamp устарела, не достигла того, кто отвечает за написание скриптового компонента SQL Server - поэтому скрипты все еще говорят timestamp,

rowversion это timestamp, Это одно и то же.

метка времени является синонимом типа данных rowversion и зависит от поведения синонимов типа данных. В выражениях DDL везде, где это возможно, используйте метку строки вместо метки времени.

Ссылка

Это было переименовано, потому что timestamp не соответствует стандарту ISO. И потому, что у людей меньше шансов ошибочно подумать, что отметка времени может представлять собой фактическую дату и время.

Просто оставьте это объявленным как rowversion, timestamp устарела и, вероятно, будет удалена позднее.

Другие вопросы по тегам