从Excel 2003 / MS Query调用SQL Server 2000内联表值函数

时间:2009-10-15 07:28:46

标签: parameters sql-server-2000 excel-2003 ms-query

我们的大部分用户群通过使用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

1 个答案:

答案 0 :(得分:1)

您可以尝试将其放入存储过程,并让Excel工作表运行存储过程。我认为它能够解决这个问题。然后只需让存储过程针对表函数运行查询。