Используя SQL Server 2016, я столкнулся с небольшой проблемой.
Вот мой вариант использования, который вызывает у меня проблемы ...
create table dbo.Example (
Id int identity (1, 1) not null,
[Name] nvarchar(100) not null,
Email nvarchar(255) not null,
DOB datetime2(7) not null,
RowHash as convert(nvarchar(66), hashbytes('SHA1', coalesce(
convert(nvarchar(max), [Name]),
convert(nvarchar(max), Email),
convert(nvarchar(max), DOB)
))) persisted
constraint [PK_Example] primary key clustered (Id asc)
);
drop table dbo.Example;
Я получаю сообщение:
Сообщение 4936, уровень 16, состояние 1, строка 1
Вычисляемый столбец 'RowHash' в таблице 'Пример' не может быть сохранен, поскольку столбец недетерминирован.
Когда я установил, что столбец не будет сохранен, тип данных будет правильно интерпретирован как nvarchar (66), однако я бы хотел, чтобы он сохранялся. Эта проблема, похоже, связана со столбцом datetime2, однако в таблице есть несколько типов данных.
Таким образом, цель состоит в том, чтобы использовать постоянный столбец хеш-байтов для хранения хеша всех значений в моей таблице.
Есть идеи?
Thx!