繁体   English   中英

来自ODBC的SQL查询中的Excel参数“错误-使用问号“ WHERE XXX =?”时,没有为一个或多个必需参数提供值

[英]Excel parameters from SQL Query from ODBC "Error - No Value given for one or more required parameters when using question mark `WHERE XXX = ?`

我有一个Excel文件,该文件具有与MS SQL服务器的SQLOLEDB连接,

当我通过Oracle链接执行此操作时,我可以简单地将WHERE XXX = ? 在我的查询中提示输入Excel中的值,但是使用MSSQL时出现以下错误:

没有为一个或多个必需参数给出值

尝试将基本的Excel查询从值参数化为?

如果我使用这样的值,我会得到结果:

SELECT * 
FROM srv.stats
WHERE srv.stats.[year] = '2016'
AND srv.stats.[quarter] = '1'

当我添加参数时? 我收到上述错误。

SELECT * 
FROM srv.stats
WHERE srv.stats.[year] = ?
AND srv.stats.[quarter] = ?

我希望不使用VB就能做到这一点。

由于来自ODBC连接的MS SQL源在本质上不允许您使用WHERE xxx = ? SQL查询中的代码(与Oracle连接不同),您需要欺骗Excel以通过构建Microsoft Query然后覆盖它来允许MS SQL数据源中的参数。

打开一个新的Excel文件,然后转到“ Data标签,选择“ From Other Sources下拉菜单,然后选择“ From Microsoft Query

在此处输入图片说明

将出现“ Choose Data Source窗口。 选择一个现有数据源或通过选择<New Data Source>来建立与服务器的新连接,然后单击OK。

在此处输入图片说明

完成后,您将看到打开了查询向导窗口以选择表和列,因为稍后将要添加自己的SQL查询时,只需选择查询中的一个表并将其添加到查询中的Columns in your query:使用>按钮。 对于接下来的2个窗口,只需单击“ Next ,然后最后单击Next Finish

在此处输入图片说明

然后,系统将提示您选择要如何在“ Import Data窗口中查看数据,首先单击“ Properties...按钮。

在此处输入图片说明

然后,在“ Command text:框中的“ Definition选项卡上,您将具有一个SELECT语句,在此下方,您需要为实际查询中的金额添加WHERE子句。 这些必须以以下格式添加:

WHERE 1 = ?
AND 2 = ?
AND 3 = ?

在此处输入图片说明

完成此操作后,单击“确定”返回“导入数据”窗口并选择您的输出类型。 表,数据透视表报表或数据透视图和数据透视表报表,取决于您要如何显示数据。

然后将提示您为每个参数输入一个值。 如果要从“单元格”中获取这些值,请按照输入实际参数的顺序选择它们的位置。 输入参数源后,请返回“数据”选项卡,单击“连接”,然后单击“定义”选项卡。

现在,在“ Command text:框中,在您的实际SQL查询中粘贴您的参数,并在WHERE子句= ?参数= ? 并以与您定义源相同的顺序,然后单击“确定”,您的数据现在应该像通常使用的参数那样填充。

无法像在Access中一样以直接的方式在SQL Server中直接提示输入。 您可以像这样将值传递给查询。

DECLARE @year SMALLINT
SET @year = 2016

DECLARE @quarter TINYINT
SET @quarter = 1

SELECT * 
FROM srv.stats
WHERE srv.stats.[year] = @year
  AND srv.stats.[quarter] = @quarter;

然后,您只需要找到一种适合您的解决方案的方法(Excel?)即可通过这些方法。 例如,这可能采用存储过程的形式。

CREATE PROCEDURE testProcedure @year SMALLINT, @quarter TINYINT
AS
    SELECT * 
    FROM srv.stats
    WHERE srv.stats.[year] = @year
      AND srv.stats.[quarter] = @quarter
GO;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM