Excel:使用单元格值作为 SQL 查询的参数

Posted

技术标签:

【中文标题】Excel:使用单元格值作为 SQL 查询的参数【英文标题】:Excel: Use a cell value as a parameter for a SQL query 【发布时间】:2009-08-16 23:58:34 【问题描述】:

我正在使用 MS Excel 通过 ODBC 从 mysql 数据库中获取数据。 我使用 SQL 查询成功获取数据。但现在我希望将该查询参数化。 所以我想知道是否可以使用单元格值(电子表格单元格)作为此类查询的参数。 例如,对于这个查询:

select name from user where id=1

我想从电子表格中的单元格 D4 中获取 id 值。

这是参数化查询的正确方法吗?我该怎么做?

谢谢。

【问题讨论】:

【参考方案1】:

我和你有同样的问题,没人能理解我,但我是这样解决的。

SELECT NAME, TELEFONE, DATA
FROM   [sheet1$a1:q633]
WHERE  NAME IN (SELECT * FROM  [sheet2$a1:a2])

您需要在其他工作表中插入一个参数,SQL 会将该信息视为 数据库,然后您可以选择信息并将它们与您喜欢的参数进行比较。

【讨论】:

谢谢,我不知道。我试试看。 您好,很抱歉迟到的问题,我想知道我们还可以使用命名函数/命名范围/命名单元作为参数吗? 这似乎正是我们想要的,但我得到一个错误,说工作表是无效对象。 不起作用,无法连接,“尝试连接时出错”:详细信息:“Microsoft SQL:无效的对象名称'Sheet2$a1:a2'。” 是的,我也是。我收到此“Microsoft SQL:无效的对象名称...”错误。【参考方案2】:

如果您使用的是微软查询,您可以添加“?”到您的查询...

从 id= 的用户中选择名称?

当您返回 excel 时,会弹出一个小窗口询问单元格/数据/等。

在弹出窗口中,您还可以选择“始终使用此单元格作为参数”,从而无需在每次刷新数据时定义该单元格。这是最简单的选择。

【讨论】:

这只是给我一个错误。 DataSource.Error: Microsoft SQL: Incorrect syntax near '?'. Must declare the scalar variable [...].【参考方案3】:
queryString = "SELECT name FROM user WHERE id=" & Worksheets("Sheet1").Range("D4").Value

【讨论】:

我想我必须在 VBA 脚本中这样做,对吧?我不认为我可以在 SQL 窗口中键入该表达式。【参考方案4】:

SQL 有点像 MS SQL 的语法。

SELECT * FROM [table$] WHERE *;

重要的是表名以 $ 符号结尾并将整个内容放在括号中。作为条件,您可以使用任何值,但到目前为止 Excel 不允许我使用我所谓的“SQL 撇号”(´),因此建议使用一个单词的列标题。

如果您在名为“Users”的表中列出了用户,并且 ID 在标题为“id”的列中,而名称在标题为“Name”的列中,您的查询将如下所示:

SELECT Name FROM [Users$] WHERE id = 1;

希望这会有所帮助。

【讨论】:

以上是关于Excel:使用单元格值作为 SQL 查询的参数的主要内容,如果未能解决你的问题,请参考以下文章

Excel在单元格值中转义引号或撇号

将 Excel 单元格值插入现有 SQL 表 [重复]

当参数作为整数传递时,Laravel 返回零而不是实际的单元格值

使用单元格值范围内的条件运行 SQL 查询列表

(Excel) 引用另一个工作表中的单元格时,我可以将工作表名称作为单元格值传递吗?

如何将 Excel 单元格值设置为 Access Query 的条件?