【发布时间】:2020-12-04 12:12:43
【问题描述】:
我目前正在构建一个基于以前的 MS Access 应用程序的闪亮应用程序。我需要在 SQL Server 中的每个 Shiny 应用程序按钮后面复制 MS Access 查询。在 R 中重用 MS Access 中的 SQL 语法的最佳方法是什么(即直接在 R 中复制粘贴 MS Access 查询)?
实际上,Access SQL 似乎与 SQL Server 语法略有不同,因此我不能简单地使用 DBI(dbGetQuery()、dbExecute()、dbSendQuery())或 dbplyr(sql())来实现。
这是一个在 R 中使用 MS Access SQL 语法的示例。(“100%”是故意留下的,因为表名包含该字符串。)
UPDATE [table1]
INNER JOIN ([table2 100%]
INNER JOIN ([table3]
INNER JOIN table4
ON ([table3].[col1] = table4.[col1])
AND ([table3].col2 = table4.col2))
ON ([table2 100%].[col1] = [table3].[col1])
AND ([table2 100%].[col2] = [table3].[col2]))
ON [table1].col1 = [table3].col1
SET [table2 100%].[col2] = [table3]![col2]
WHERE ((([table3].[colY])<>0) AND (([table3].[colZ])=True));
导致在 R 控制台中出现以下错误消息:
错误:nanodbc/nanodbc.cpp:1617:42000:[Microsoft][ODBC SQL Server Driver][SQL Server]关键字“INNER”附近的语法不正确。 [Microsoft][ODBC SQL Server Driver][SQL Server]'table3' 附近的语法不正确。 [Microsoft][ODBC SQL Server Driver][SQL Server]无法准备语句。
当我调整查询时,我还得到:“多部分标识符......无法在 Join 语句中绑定”。
我建立了我的连接:
con <- DBI::dbConnect(odbc::odbc(), driver = params.SQL.driver,
server = params.SQL.server, database = params.SQL.database,
encoding = params.SQL.encoding)
其中 params.SQL.server = "SQL Server"
【问题讨论】:
-
第一条评论:“我不能简单地使用任一 DBI 来做到这一点”= 当我在该函数的语句部分复制粘贴 MS Access 查询时:
DBI::dbExecute(conn = con, statement = my_query)。这会导致错误。第二条评论:是的,我正在尝试在 SQL Server 中转换 MS Access 更新查询。我天真地认为复制粘贴就可以了。但是 MS Access SQL 和 SQL server 的语法不同 -
@parfait 我通过 odbc 连接到 MS Access 以获取所需的表并将它们写入 SQL 服务器。我只连接过一次,现在我只连接到 SQL Server