BOL 实际上声明:
以下功能是不
总是确定性的,但可以
用于索引视图或索引
计算列时
以确定的方式指定。
然后在下面说明必须满足哪些条件才能使它们具有确定性。
例如
CAST - 确定性,除非与
日期时间、小日期时间或
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 您将收到以下错误:
表 'dbo.deterministicTest' 中的列 'castDateTimeToInt'(castIntToDateTime) 不能用于索引或统计信息或作为分区键,因为它是非确定性的。
因此,如果您想保持确定性,日期时间既不能用作 CONVERT 函数的源格式,也不能用作目标格式