有点难倒这个。与我一起工作的人在到 SQL Server 的 Excel 数据连接查询中遇到了一些问题。当他将 SQL 查询从硬编码日期过滤器更改为使用参数和单元格值时,他得到一个错误(无法将字符串转换为 smalldatetime)。值得注意的是,该查询有多个子查询。我做了一些研究,发现以下内容:
1) 在将一个硬编码日期更改为参数引用的原始查询的 NetMon 捕获中,Excel 将参数数据类型作为 varchar(50) 发送。
2) 当我将查询更改为将所有日期更改为参数引用时,只有最后一个参数作为 varchar(50) 发送,其余参数作为 smalldatetime 发送(与表的数据类型匹配)。
3)当我更改查询以删除子查询但没有别的时,查询正确返回并且 Excel 发送正确的数据类型。在这种情况下,只有一个参数。
4) 当我将查询转储到存储过程中并从同一个 Excel 数据连接中调用它时,参数都可以正常工作。
我尝试移动单元格,以便我可以查看它是否是类似JET 的 Excel 检查前 8 行数据以确定数据类型的问题 - 不是问题。
为什么会发生这种情况?正如我所提到的 - 难倒。
代码本质上是这样的:
SELECT Name
, Sum(Sales) AS Sales
, (SELECT SUM(Cost) FROM Costcenter where Date > ? AND Date <= ?) As Costs
FROM SalesTable
Where Date = ?
Group by name
Order by name
最后一个?
(在WHERE
子句中是让我悲伤的那个。