BOL фактически указывает:
Следующие функции не всегда являются детерминированными, но могут использоваться в индексированных представлениях или индексах для вычисляемых столбцов, если они определены детерминированным образом.
а затем ниже указывается, какие условия должны быть выполнены, чтобы сделать их детерминированными.
E.g.
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, если вы хотите оставаться детерминированным.
person
kristof
schedule
02.04.2009