我有一个包含3列(id,SampleValue和SampleDateTime)的历史数据库,它们在值发生变化时记录所有id的SampleValue。我想要做的是每天构建一个报告,即使值没有改变,也会每分钟为特定的id提供SampleValue。我设法在本文How to fill the gaps?的帮助下构建了一些东西。我在存储过程中执行此操作,因此我将能够在Microsoft Visual Studio(SSRS报表设计器)中使用该存储过程来构建我的报表。这是我的代码:
create proc test13_GetHist as
WITH CTE AS (
SELECT max(Getdate()) maxdate, min(DATEADD(day, 1, Getdate())) mindate
FROM Historian_Database.dbo.NumericSamples
WHERE TagID=41
),
RecursiveCTE AS (
SELECT mindate dtfield
FROM CTE
UNION ALL
SELECT DATEADD(minute, 1, dtfield)
FROM RecursiveCTE R
JOIN CTE T
ON R.dtfield < T.maxdate
)
SELECT r.dtfield,
(SELECT TOP 1 SampleValue
FROM Historian_Database.dbo.NumericSamples
WHERE SampleDateTime <= r.dtfield ORDER BY SampleDateTime DESC) SampleValue
FROM RecursiveCTE r
ORDER BY dtfield asc
OPTION (MAXRECURSION 0);
SampleValue是float类型,id是int类型,SampleDateTime是bigint或datetime2。 我的问题是,当我尝试预览报告时出现此错误消息:“在本地报告处理期间发生错误。报告处理期间发生错误。无法读取数据集DataSet2的下一个数据行。算术溢出错误转换表达式到数据类型datetime。“
我不知道如何处理该错误。
真的很感激任何帮助。
感谢,
伊曼纽尔