0

有点难倒这个。与我一起工作的人在到 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子句中是让我悲伤的那个。

4

1 回答 1

0

遇到此问题的同事找到了以下解决方法。在单元格中输入日期时,请使用以下公式:

=TEXT(EDATE('3/13/2013'),0),"MM/DD/YYYY")

不理想,但对于只需要获取数据的用户来说,这是一个快速解决方案。

于 2013-08-30T16:02:35.027 回答