我有一个索引视图,我基本上需要这样做
SELECT ...
CASE
WHEN ISDATE(ColumnName) = 1 THEN CONVERT(datetime, ColumnName, 103)
ELSE NULL
END AS ViewColumn
....
尝试创建索引产生:
MSDN说无法在视图上创建索引 '....'。功能 'isdate'产生不确定的结果。使用确定性系统 函数,或修改用户定义的函数以返回确定性 结果
ISDATE只有在CONVERT函数中使用时才具有确定性 如果指定了CONVERT样式参数,则样式为 不等于0,100,9或109。
http://msdn.microsoft.com/en-us/library/ms187347.aspx。
但我不知道这意味着什么。据我所知,我正在使用CONVERT函数....
有什么方法可以解决这个问题吗?
答案 0 :(得分:4)
应该是,如果有的话:
SELECT ...
CASE
WHEN ISDATE(ColumnName) = 1 THEN CONVERT(datetime, ColumnName, 103)
ELSE NULL
END
....
但是,你没有使用ISDATE WITH CONVERT,因为没有像
这样的表达式ISDATE(CONVERT(varchar,ColumnName,112))
没有嵌套转换,返回值依赖于语言设置之类的东西,因此它是不确定的行为。如果没有“外部”知识,就无法根据输入单独预测结果。
答案 1 :(得分:0)
Reference 索引视图有哪些要求? 使用索引视图时,必须考虑几个要求。
1. View definition must always return the same results from the same underlying data.
2. Views cannot use non-deterministic functions.
3. The first index on a View must be a clustered, UNIQUE index.
4. If you use Group By, you must include the new COUNT_BIG(*) in the select list.
5. View definition cannot contain the following
(A) TOP
(B) Text, ntext or image columns
(C)DISTINCT
(d)MIN, MAX, COUNT, STDEV, VARIANCE, AVG
(E)SUM on a nullable expression
(F)A derived table
(G)Rowset function
(H)Another view
(I)UNION
(J)Subqueries, outer joins, self joins
(K)Full-text predicates like CONTAIN or FREETEXT
(L)COMPUTE or COMPUTE BY
(M)Cannot include order by in view definition