![](/img/trans.png)
[英]OLE DB / ODBC error: no value given for one or more required parameters
[英]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.