【发布时间】:2016-10-13 21:10:36
【问题描述】:
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(MONTH, DATEDIFF(MONTH, 0, Convert(varchar(8), getdate(), 112)), 0)
错误:
无法在视图“dbo.view”上创建索引,因为该视图使用 从字符串到 datetime 或 smalldatetime 的隐式转换。使用 具有确定性样式值的显式 CONVERT。
【问题讨论】:
-
Convert(varchar(8),getdate(),112),为什么?你应该使用GETDATE() -
我需要将视图过滤到当月的第一天,因此 getdate() 不起作用。
-
@Lamak 说没有必要在
DATEDIFF函数中转换日期(例如,只写DATEDIFF(MONTH, 0, GETDATE())),但我怀疑这是导致您的问题的原因。
标签: sql sql-server indexing views