Sql server 转换是非确定性的吗?

Sql server 转换是非确定性的吗?,sql-server,non-deterministic,sql-convert,Sql Server,Non Deterministic,Sql Convert,我有下表: CREATE TABLE Portfolio.DailyStats ( Date date NOT NULL PRIMARY KEY, NAV int NOT NULL, SP500 decimal(8,4) NULL, R2K decimal(8,4) NULL, NetExp decimal(8,4) NULL, GrossExp decimal(8,4) NULL, [YrMn] AS (CONVERT([varchar](7),[Date])), ) GO 我在想,我可能

我有下表:

CREATE TABLE Portfolio.DailyStats
(
Date date NOT NULL PRIMARY KEY,
NAV int NOT NULL,
SP500 decimal(8,4) NULL,
R2K decimal(8,4) NULL,
NetExp decimal(8,4) NULL,
GrossExp decimal(8,4) NULL,
[YrMn]  AS (CONVERT([varchar](7),[Date])),
)
GO
我在想,我可能需要在某个时候建立一个索引视图,所以我想确保我的计算列[YrMn]是确定性的。我开了这张支票:

Select COLUMNPROPERTY (OBJECT_ID('Portfolio.DailyStats'),'YrMn', 'IsDeterministic')

此操作返回的值为0,表示该列不确定。考虑到列值在特定日期始终相同,我很难理解为什么会出现这种情况。它与convert函数有关系吗?它是什么?

如果包含
convert()
的第三个参数,即
样式,它将变得具有确定性。e、 g

[YrMn]  AS (convert([varchar](7),[Date],120))

rextester演示:

您需要为其提供一个样式参数以使其具有确定性。您需要在转换中添加一个
style
,使其具有确定性:
convert(varchar(7),[date],103)
用于InstanceLight detour…不确定日期数据类型是否适合主键。老实说,YrMn列可以很容易地在前端处理现有数据的格式。