查询在子查询中设置参数

Query set a parameter in subquery

如何在 Excel 查询中添加参数?这种情况可不是当场放?那么简单。查询是:

SELECT * FROM crm.dbo.Meetings mt
left outer join crm.dbo.Cases cs on mt.meet_CaseId = cs.Case_CaseId
left outer join CRM.dbo.Customer cust on mt.meet_companyid =cust.cust_CustomerID
left outer join crm.dbo.users on mt.meet_launcher = user_userid
WHERE mt.meet_companyid in  (select * from crm.dbo.customer_tree(7587,0))

在最后一个子句中,工作基本上是设置四位数字作为参数,从当前工作簿中的另一个sheet读取单元格内容。

in  (select * from crm.dbo.customer_tree( ? ,0)) 

(仅供参考,customer_tree 不是数据库中的简单 table/view 名称,而客户是 table 名称。)

但是Excel2007不喜欢这种格式,错误信息显示为:

[Microsoft][ODBC SQL Server Driver]Syntax error or access violation
[Microsoft][ODBC SQL Server Driver]Invalid Descriptor Index

有谁知道怎么弄吗?

有提示可以通过将单元格内容分配给变量然后重置整个查询命令框来解决此问题。

第 1 步

创建一个 ActiveX 控件命令按钮 通过开发 -> 插入 -> ActiveX 命令按钮(第一个)

在 sheet 中绘制一个按钮,并设置名称、标题和任何其他属性(可选)。

第 2 步

双击按钮,或右键单击选择查看代码,或单击开发工具栏上的 Visual Basic 打开 VBA 编辑器。

修改sheet的代码如下(我的按钮叫刷新):

Private Sub Refresh_Click() 

    'Declare a variable to content the cell, here is a number in my case
    Dim CustomerId As Integer

    'Declare variables for my ODBC connection, "sql01" is the table name   
    Dim awc As WorkbookConnection
    Set awc = ActiveWorkbook.Connections("sql01")

    'Get the cell content which has the target number
    CustomerId = Sheets("Sheet1").Range("B2").Value


    'Pass the Parameters values 
    With awc.ODBCConnection

        .CommandText = "mt.meet_companyid IN " & _ 
               "( select * from crm.dbo.customer_tree('" & **CustomerId** & "', 0)) " 

        'Refresh the sheet
        awc.Refresh

    End With
End Sub

一旦用户点击该按钮,查询命令将更改为当前单元格内容编号。