我们的大部分用户群通过使用Microsoft Query在Excel 2003中构建ODBC查询来访问公司数据。对于更复杂的东西,他们经常让我参与其中。
在很多场合,我已经决定提取某些数据的最合理的方法是使用内联表值函数来实现参数化视图的功能。从查询分析器调用时,这可以正常工作:
SELECT * FROM fn_AverageRecovery('2009-07','2009-10')
Sequence Process Centre Process Centres_Description Input Qty Output Qty Recovery
----------- -------------------------------------------------- -------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- -----------------------------------------------------
10 GM Green Mill 12345.678 11223.344 11
11 LYR Log Yard Report 98765.432 55443.322 99
20 MB MultiBand Resaw 5555.666 5555.444 50
但是,在MS Query中输入相同的SELECT子句会导致错误:无法添加表'fn_AverageRecovery('2009-07''。
不仅如此,我真正想做的是从电子表格中获取Period参数,但是如果我用问号替换文字,MS Query会给我带来可怕的错误:查询中不允许参数不能用图形显示。
现在,我曾经设法通过使用相当不优雅的方法来输入一些简单的SQL语句,单击Excel中结果集中的任何单元格,然后切换到VBA并手动设置CommandText属性,从而避免了这种情况。立即窗口:
ActiveCell.QueryTable.CommandText="select * from fn_AverageRecovery(?,?)"
VBA没有投诉。但当我切换回Excel并右键单击单元格并选择刷新数据时,我得到两个错误:
[Microsoft] [ODBC SQL Server驱动程序]参数号无效
[Microsoft] [ODBC SQL Server驱动程序]无效的描述符索引
每次遇到这种情况,我都花了一个小时左右的时间试图让它发挥作用,但总是不得不采取另一种方式解决问题。我很想知道是否有人已经征服了这一点。
由于
Wayne Ivory
答案 0 :(得分:1)
您可以尝试将其放入存储过程,并让Excel工作表运行存储过程。我认为它能够解决这个问题。然后只需让存储过程针对表函数运行查询。