【问题标题】:Excel-to-Excel data connection gives limited SQL optionsExcel 到 Excel 数据连接提供有限的 SQL 选项
【发布时间】:2015-12-15 05:00:02
【问题描述】:

我主要是 Excel 用户,只在需要时才涉足技术/编程方面,所以假设我在所有这些数据链接方面有点新手,但是:

在很多情况下,在 Excel 2010 中,我已经转到

  • 数据 -> 来自其他来源... -> 来自 SQL Server

这使我能够连接到我们的数据库表。完成后,我可以去

  • 数据 -> 全部刷新 [V] -> 连接属性... -> 定义选项卡

并将命令类型更改为 SQL。然后我可以粘贴我在 Microsoft SQL Server 2012 中使用的相同类型的 SQL,一切都很好。它连接数据库,根据SQL代码提取需要的信息,得到我想要的。

但是我有不同的连接,连接到不同的 Excel 工作簿。我尝试通过两种方式创建连接:

1) 数据 -> 来自其他来源... -> 来自 Microsoft Query -> Excel 文件

2) 数据 -> 从 Access -> 然后浏览并选择 Excel 文件

这两种方法都有效,并给我一个指向我的 Excel 文件的链接。但是当我像往常一样尝试编辑 SQL 查询时,它们都有相同的问题:

我转到连接属性... -> 定义选项卡 -> 命令类型,它显示 SQL,然后我编辑出现在下面的命令文本框中的 SQL 代码。

我的问题是,当我通过 SQL Server 方法执行此操作时,SQL 现在无法识别它很高兴识别的语法。例如:

  • 如果我尝试使用 -- 或 /* ... */ 语法添加注释,我会收到错误:[Microsoft][ODBC Excel Driver] Invalid SQL Statement;应为“DELETE”、“INSERT”、“PROCEDURE”、“SELECT”或“UPDATE”。
  • 如果我尝试添加一个列:CURRENT_TIMESTAMP AS [Refresh Date],然后我得到 [Microsoft][ODBC Excel Driver] 参数太少。预计 1。

目前的SQL代码很简单,就是:

SELECT
[ID],
[Gift]
FROM
    [Data$]
WHERE
    [Gift] <> ''
    AND
    [Gift] <> 'Not a Gift'
    AND
    [ID] <> ''

我想要的只是第三列,位于 ID 和 Gift 旁边,名为 [Refresh Date]。我猜这会是:

SELECT
[ID],
[Gift],
CURRENT_TIMESTAMP AS [Refresh Date]

但这并不像上面描述的那样工作。

我注意到连接类型不同,具体取决于我使用的连接方法 - Excel 文件方法的“数据库查询”、访问方法的“Excel 文件”和 SQL 的 OLE DB 查询服务器一;我不知道这是否会影响我能够使用的 SQL 语言。不同方法的连接字符串也完全不同,但我不确定这是否与我不能仅使用基本 SQL 命令有关。

我的实际目标是能够在 Excel 中获取一个单元格,该单元格 (a) 输入由执行数据的人刷新的日期 -> 全部刷新,并且 (b) 不输入该日期如果该表的刷新失败。我认为最简单的方法就是在表中创建一个包含当前日期的列,但我想知道 SQL 限制是否会阻止它?

有没有办法让 SQL 获得更多功能,就像我对 SQL 服务器链接所做的那样?或者作为一种解决方法,是否有其他方法(可能通过 VBA)来获取表是否已成功刷新,因此如果确实已成功刷新,我可以使用 VBA 在其他地方的单元格中写入今天的日期(我已经有VBA 为我执行 Data->RefreshAll)?

提前致谢!

【问题讨论】:

  • 您使用的 SQL 风格比 MS SQL 的 T-SQL 更接近 Access DAO SQL。您不会有 CURRENT_TIMESTAMP 作为选项,但您可以尝试 Now()。
  • 啊哈!是的,Now() AS [Refresh Date] 有效。今天的问题解决了!
  • 并用“Access DAO SQL”这个短语武装到谷歌,我得到了更多关于它的信息,谢谢。除了其中一个答案中的a workaround 之外,我似乎根本没有任何cmets。谢谢,@Jeeped,请拥有这个论坛 cookie :-) 知道是否有任何方法可以将其转换为更多的 T-SQL 事物而不是 Access 事物,但我希望这是 Excel 连接的限制,除非有人知道不同:-)
  • 如果你想进入更原生的 T-SQL(也许是分区表...?),那么你将不得不使用存储过程和视图,让 MS SQL 引擎完成工作。跨度>

标签: sql excel connection-string data-connections


【解决方案1】:

您使用的 SQL 风格更接近于 Access DAO SQL,而不是 MS SQL 的 T-SQL。您不会选择 CURRENT_TIMESTAMP,但应该可以选择 Now()

SELECT
[ID],
[Gift],
Now() AS [Refresh Date]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    相关资源
    最近更新 更多