簡體   English   中英

SQL Server 2014嘗試創建索引視圖,但是出現以下錯誤

[英]SQL Server 2014 trying to create an indexed view however I'm getting the following error

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'上創建索引,因為該視圖使用從字符串到日期時間或smalldatetime的隱式轉換。 使用具有確定性樣式值的顯式CONVERT。

您可以在上個月末增加一天。

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))

如評論中所述,要查找每月的第一天,可以使用

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/zh-CN/library/ms191432.aspx

https://msdn.microsoft.com/zh-CN/library/ms178091.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM