SQLSVR - невозможно создать индекс с вычисленным столбцом GETDATE
Чего я хочу достичь: создать индекс с существующими данными столбца даты, преобразованными в время UTC ( запрос написан ниже)
Проблема: в таблице есть столбец со значениями даты локального сервера, мне нужно преобразовать их в значение даты в формате UTC, а затем создать над ним индекс.
Зачем мне это нужно: у меня то же самое, что и в oracle, и я пытаюсь перенести вещи вместе с запросами в Sql Server для нового клиента
Проблема: индекс не принимает переменные или пользовательские функции. Но в качестве параметров принимает только столбцы таблицы.
Только решение: создать вычисляемый столбец в таблице и использовать его для создания индекса.
Шаги, которые я сделал:
Сначала выполните следующие запросы
ALTER TABLE dbo.tableClient ADD tempComp1 AS DATEADD(minute, datediff(minute, GETUTCDATE(), getdate()), [svrDate]) GO create index idx1 on dbo.tableClient([key] asc, [tempComp1] desc, [type]) GO
Это дает следующую ошибку:
Столбец tempComp1 в таблице dbo.tableClient нельзя использовать в индексе, статистике или в качестве ключа раздела, поскольку он недетерминирован.
Поэтому я попытался сделать столбец УСТОЙЧИВЫМ
ALTER TABLE dbo.tableClient ADD tempComp1 AS DATEADD(minute, datediff(minute, GETUTCDATE(), getdate()), [svrDate]) PERSISTED
теперь он дает ошибку:
Вычисляемый столбец «tempComp1» в таблице «tableClient» не может быть сохранен, поскольку столбец не является детерминированным.
Теперь самое смешное, если я это сделаю
SELECT datediff(minute, GETUTCDATE(), getdate())
он дает результат: 330
Теперь, если я попробую те же команды с 330
ALTER TABLE dbo.tableClient ADD tempComp1 AS DATEADD(minute, 330, [svrDate]) PERSISTED
GO
create index idx1 on dbo.tableClient([key] asc, [tempComp1] desc, [type])
GO
он работает абсолютно нормально.