从 Excel 2003/MS Query 调用 SQL Server 2000 内联表值函数
我们的很大一部分用户群通过使用 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''。
不仅如此,我真正想做的是从电子表格中获取的周期参数,但是如果我用问号替换文字,MS Query 就会出现可怕的错误:无法以图形方式显示的查询中不允许使用参数
现在,我有时设法避免这种情况 。过去,通过使用相当不优雅的方法输入一些简单的 SQL 语句,单击 Excel 中结果集中的任何单元格,然后切换到 VBA 并在立即窗口中手动设置 CommandText 属性:
ActiveCell.QueryTable.CommandText="select * from fn_AverageRecovery(?,?)"
VBA 没有抱怨但是当我切换时。返回 Excel 并右键单击单元格并选择“刷新数据” 我收到两个错误:
[Microsoft][ODBC SQL Server Driver]无效的参数号
[Microsoft][ODBC SQL Server Driver]无效的描述符索引
每次我都会遇到我花了一个小时左右试图让它工作,但总是不得不诉诸其他方式解决它。我很想知道是否有人征服了这个。
谢谢韦恩
·象牙
A large part of our user base accesses corporate data by building ODBC queries inside Excel 2003 using Microsoft Query. For the more complex stuff they often get me involved.
There have been a number of occasions whereby I've decided that the most logical way to extract certain data would be to use an Inline Table-Valued Function to achieve the functionality of a parameterised view. This works fine when called from Query Analyzer:
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
However entering the same SELECT clause in MS Query causes the error: Could not add the table 'fn_AverageRecovery('2009-07''.
Not only that, but what I really want to do is have the Period parameters picked up from the spreadsheet, however if I replace the literals with question marks MS Query gives me the dreaded error: Parameters are not allowed in queries that can't be displayed graphically.
Now, I have managed to circumvent this situation sometimes in the past by using the rather inelegant method of entering some simple SQL statement, clicking any cell in the result set within Excel, then switching to VBA and setting the CommandText property manually in the Immediate window:
ActiveCell.QueryTable.CommandText="select * from fn_AverageRecovery(?,?)"
No complaints from VBA. But when I switch back to Excel and right-click on the cell and choose Refresh Data I get two errors:
[Microsoft][ODBC SQL Server Driver]Invalid parameter number
[Microsoft][ODBC SQL Server Driver]Invalid Descriptor Index
Every time I've come across this I've spent an hour or so trying to get it working but have always had to resort to solving it another way. I'd love to know if anybody has conquered this.
Thanks
Wayne Ivory
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以尝试将其放入存储过程中,然后让 Excel 工作表运行该存储过程。我认为它能够处理这个问题。然后只需让存储过程针对表函数运行查询即可。
You could try putting this into a stored procedure, and having the Excel sheet run the stored procedure. I would think it would be able to handle this. Then simply have the stored procedure run the query against the table function.