来自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;