【问题标题】:Pass parameters to temp variables in MS Query on SQL Server from Excel从 Excel 将参数传递给 SQL Server 上的 MS Query 中的临时变量
【发布时间】:2025-12-17 18:40:01
【问题描述】:

我已经使用 Microsoft 查询创建了一个参数查询,如提到的 here。但是当我想将参数传递给临时变量并创建表变量并编辑它们以获得所需的结果而不是执行 10 到 15 次连接并在 where 子句中提及参数时,我会出错

[Microsoft] [ODBC SQL Server Driver] 参数号无效

[Microsoft] [ODBC SQL Server 驱动程序] 描述符索引无效

我的代码看起来像这样,它包含许多临时表和临时变量,非常复杂

BEGIN
    SET NOCOUNT ON

    DECLARE @sDate DATETIME, @eDate DATETIME; --used in many places to manipulate temp table

    SET @sdate = ?
    SET @edate = ?

    DECLARE @Temptable TABLE (Variable1 INT ,...... VariableN DECIMAL(18,4));

    Manipulate @temptable

    Select * from @Temptable 
END 

对于 SQL Server 2005 中的数据库,如何将参数传递给 Excel 2007 中的临时变量?我无权在数据库中创建存储过程并将它们作为参数传递给它。

更新

我已经按照David Vandenbos 的建议找到了一种通过 VBA 的方法。我仍然很想知道这是否可以在没有 VBA 的帮助下完成。

【问题讨论】:

  • +1,好问题。不幸的是,我认为这不能通过 MS Query 在 Excel 中完成。查询仅限于在可以“以图形方式显示”的查询中传递参数,尽管您可以传递其他所有内容。您是否有权在数据库上创建视图?您也许可以创建一个视图,然后将它们返回到 Excel 中的参数。否则,我认为您可能需要 VBA。
  • @DavidVandenbos 我找到了通过 VBA 的方法。谢谢

标签: sql-server excel sql-server-2005 excel-2007


【解决方案1】:

您可以在声明变量之前添加 SET NOCOUNT ON。我在 Excel 2010 中与 Microsoft Query 和 SQL Server 2005 完美配合。

SET NOCOUNT ON
DECLARE @VAR1 VARCHAR(4)
SET @VAR1 = '1234'
SELECT @VAR1

https://social.msdn.microsoft.com/Forums/office/en-US/d8003854-d11a-44f7-960c-a042347736d7/microsoft-query-cannot-run-sql-code-with-a-tsql-variables-in-it?forum=exceldev

【讨论】:

  • 我确实添加了SET NOCOUNT ON,正如您在上面问题的代码中看到的那样。它在 Excel 2007 中不起作用。