【发布时间】: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