1

我在尝试将参数插入派生表时遇到问题,该派生表是 vb.net 应用程序中我的表适配器填充查询的一部分。

当我尝试通过数据集设计器的预览窗口或在我的应用程序中使用 datatableadapter.fill 方法在 vb.net 中使用查询时,我收到“从字符串转换日期和/或时间时转换失败”。

SELECT Date, SUM(RegHours) AS RegTotal, SUM(OTHours) AS OTTotal, SUM(VacHours) AS VacTotal, SUM(SickHours) AS SickTotal

FROM (SELECT EmployeeId, Date, RegHours, OTHours, (CASE WHEN TaskId=4 THEN RegHours ELSE NULL END) AS VacHours, (CASE WHEN TaskId=5 THEN RegHours ELSE NULL END) AS SickHours FROM TimeEntry

WHERE (EmployeeId=@EmployeeId) AND (Date>=@StartDate)) AS SubTable

GROUP BY Date

当我只有 @EmployeeId 参数时,查询可以完美运行,所以问题在于日期转换。

如果我只执行派生表部分,查询也可以正常工作:

SELECT EmployeeId, Date, RegHours, OTHours, (CASE WHEN TaskId=4 THEN RegHours ELSE NULL END) AS VacHours, (CASE WHEN TaskId=5 THEN RegHours ELSE NULL END) AS SickHours 

FROM TimeEntry 

WHERE (EmployeeId=@EmployeeId) AND (Date>=@StartDate)

任何帮助将不胜感激!

4

1 回答 1

0

我能够通过在表定义中添加 VacHours 和 StatHours 作为计算列,然后在不需要派生表的情况下进行选择来解决这个问题。

SELECT Date, SUM(RegHours) AS TotalReg, SUM(OTHours) AS TotalOT, SUM(VacHours) AS TotalVac, SUM(StatHours) AS TotalStat
FROM TimeEntry
WHERE (EmployeeId = @EmployeeId) AND (Date >= @StartDate) AND (Date <= @EndDate)
GROUP BY Date

我怀疑我可能仍然没有填写正确的数据类型或正确转换,但这确实为我提供了一个简单的解决方案。

于 2015-05-13T18:27:22.470 回答