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
устарела и, вероятно, будет удалена позднее.