2

我主要是 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 Server 的 OLE DB 查询;我不知道这是否会影响我能够使用的 SQL 语言。不同方法的连接字符串也完全不同,但我不确定这是否与我不能仅使用基本 SQL 命令的原因有关。

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

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

提前致谢!

4

1 回答 1

1

您使用的 SQL 风格比 MS SQL 的 T-SQL 更接近 Access DAO SQL。你不会有CURRENT_TIMESTAMP一个选项,但Now()应该可以作为替代方案。

SELECT
[ID],
[Gift],
Now() AS [Refresh Date]
于 2015-12-15T06:01:13.960 回答