SQL Server 2014尝试创建索引视图,但是我收到以下错误

时间:2016-10-13 21:10:37

标签: sql sql-server indexing views

Constants.bucketName

错误:

  

无法在视图上创建索引' dbo.view'因为视图使用了   从字符串到datetime或smalldatetime的隐式转换。用一个   具有确定性样式值的显式CONVERT。

2 个答案:

答案 0 :(得分:0)

您可以在上个月末添加一天。

SELECT 
     fcb.PharmacyKey  as PharmID 
    ,fcb.DateKeY as UploadDate
    ,fcb.RecordSource as Description
    ,fcb.Amount
FROM dbo.FactCheckBookData fcb
WHERE fcb.RecordSource in ('BeginningBalance')
AND convert(datetime,left(fcb.DateKey,8),101) =  
    DateAdd (Day, 1, EOMONTH(getdate(), -1))

答案 1 :(得分:0)

如评论中所述,要查找该月的第一天,您可以使用

DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()),0)

但是,如果更改代码,错误将更改为

Cannot create index on view 'someView'. The function 'getdate' yields nondeterministic results. Use a deterministic system function, or modify the user-defined function to return deterministic results.

因为GETDATE()是非确定性的,因此无法在索引视图中使用。

https://msdn.microsoft.com/en-AU/library/ms191432.aspx

https://msdn.microsoft.com/en-us/library/ms178091.aspx