来自ODBC的Excel SQL查询“错误 – 当使用问号`WHERE XXX =?`时,没有为一个或多个必需参数给出值

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

当我用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连接不同),你需要通过构build一个Microsoft Query来欺骗Excel以允许来自MS SQL数据源的参数,然后覆盖它。

打开一个新的Excel文件,并转到Data选项卡,selectFrom Other Sources下拉列表并selectFrom Microsoft Query

在这里输入图像说明

Choose Data Source窗口将出现。 select一个现有的数据源,或者通过select<New Data Source>然后单击确定,build立一个到服务器的新连接。

在这里输入图像说明

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

在这里输入图像说明

随后会提示您select如何在“ Import Data窗口中查看数据,首先单击“ Properties...button。

在这里输入图像说明

然后在“ Definition选项卡的“ Command text:框中,您将拥有一个SELECT语句,在那里您将需要为实际查询中的金额添加WHERE子句。 这些需要添加的格式为:

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

在这里输入图像说明

完成此操作后,单击确定返回导入数据窗口并select输出types; 表,数据透视表报告或数据透视图和数据透视表报告,取决于你想如何显示你的数据。

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

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

没有办法直接在SQL Server中提示input,就像你可以在Access中一样。 您可以将这样的值传递到查询中。

 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; 

然后你只需要find一个适合你的解决scheme(Excel?)来传递这些信息。 例如,这可能采取存储过程的forms。

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