BOL фактически заявляет:
Следующие функции не
всегда детерминированный , но может быть
используется в индексированных представлениях или индексах на
вычисляемые столбцы, когда они
указан детерминистическим образом.
, а затем под ним указано, какие условия должны быть выполнены, чтобы сделать их детерминированными.
1011 * Е.Г. *
CAST - детерминированный, если не используется с
datetime, smalldatetime или
sql_variant
Другими словами, вы должны соответствовать этим условиям, чтобы использовать их детерминистическим образом
Например, когда вы создаете таблицу
CREATE TABLE [dbo].[deterministicTest](
[intDate] [int] NULL,
[dateDateTime] [datetime] NULL,
[castIntToDateTime] AS (CONVERT([datetime],[intDate],0)),
[castDateTimeToInt] AS (CONVERT([int],[dateDateTime],0)),
[castIntToVarchar] AS (CONVERT([varchar],[intDate],0))
) ON [PRIMARY]
вы можете применить индекс к castIntToVarchar, но если вы попытаетесь добавить индекс в castDateTimeToInt или castIntToDateTime, вы получите следующую ошибку:
Столбец castDateTimeToInt (castIntToDateTime) в таблице dbo.deterministicTest нельзя использовать в индексе, статистике или ключе раздела, поскольку он недетерминирован.
Таким образом, dateTime нельзя использовать ни в качестве исходного, ни в качестве целевого формата функции CONVERT, если вы хотите оставаться детерминированным