SQLSVR - невозможно создать индекс с вычисленным столбцом GETDATE

Чего я хочу достичь: создать индекс с существующими данными столбца даты, преобразованными в время UTC ( запрос написан ниже)

Проблема: в таблице есть столбец со значениями даты локального сервера, мне нужно преобразовать их в значение даты в формате UTC, а затем создать над ним индекс.

Зачем мне это нужно: у меня то же самое, что и в oracle, и я пытаюсь перенести вещи вместе с запросами в Sql Server для нового клиента

Проблема: индекс не принимает переменные или пользовательские функции. Но в качестве параметров принимает только столбцы таблицы.

Только решение: создать вычисляемый столбец в таблице и использовать его для создания индекса.

Шаги, которые я сделал:

  1. Сначала выполните следующие запросы

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

  2. Поэтому я попытался сделать столбец УСТОЙЧИВЫМ

            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

он работает абсолютно нормально.

0 ответов

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