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

Parameters 从Excel 2003/MS查询调用SQL Server 2000内联表值函数,parameters,sql-server-2000,excel-2003,ms-query,Parameters,Sql Server 2000,Excel 2003,Ms Query,我们的大部分用户通过使用Microsoft Query在Excel 2003中构建ODBC查询来访问公司数据。对于更复杂的事情,他们经常让我参与其中 在很多情况下,我决定提取某些数据的最合乎逻辑的方法是使用内联表值函数来实现参数化视图的功能。当从查询分析器调用时,此选项可以正常工作: SELECT * FROM fn_AverageRecovery('2009-07','2009-10') Sequence Process Centre

我们的大部分用户通过使用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查询中输入相同的SELECT子句会导致错误:无法添加表“fn_AverageRecovery('2009-07')

不仅如此,我真正想做的是从电子表格中提取周期参数,但是如果我用问号替换文字,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

您可以尝试将其放入存储过程中,并让Excel工作表运行存储过程。我认为它能够处理此问题。然后让存储过程针对表函数运行查询。

谢谢Denny,您是对的。但我之所以要使用此函数,通常是因为我想在连接中使用它,当然我不能使用存储过程。Wayne,我知道这篇文章是2009年发布的,但我只是想问一下。你能在MS Query中使用表值函数吗?如何使用?我得到一个错误“函数没有提供参数”,即使我的函数真的不需要任何输入参数。