r-无法使用RStudio SQL工具(带良好的数据库连接)运行内部联接以获取数据(从Microsoft服务器)



我的问题是:我正在使用R-SQL工具从服务器中影响数据。尽管我的数据库连接很好,并且我可以对每个单独的表运行查询,但我不能使用相同的R-SQL工具运行两个表的内部联接,即dbconnent(来自DBI(和sqlQuery(来自RODCB(

  • 以下是运行dbconnent((时的错误消息:"错误:nanodbc/nanodbc.cpp:1655:42000:[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]关键字"Key"附近的语法不正确。无法准备[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]语句">

以下是缩写代码

----
sql1 <- "
SELECT 
e.RID, e.Form, 
i.ItemName, i.Response
FROM ExamResult AS e 
INNER JOIN ItemResult AS i 
ON e.RID=i.RID
WHERE  e.ExamSeriesCode= 'Exam1'
" 
result <- dbGetQuery(conn, sql1)

谢谢!

  • 为了调试,我对每个单独的表运行了查询,结果很好。

  • 我检查了每个表中的链接var(RID(,它们有相同的名称和属性

  • 我尝试了dbconnent(来自DBI(和sqlQuery(来自RODCB(。同样的问题(未运行内部联接(仍然存在。

您的错误消息包括对Key、的引用

Error: nanodbc/nanodbc.cpp:1655: 42000: [Microsoft][ODBC Driver 17 for SQL 
Server][SQL Server]Incorrect syntax near the keyword 'Key'. [Microsoft][ODBC 
Driver 17 for SQL Server][SQL Server]Statement(s) could not be prepared. 

这表明您的实际查询中有Key。这是SQL中的保留字,要求对其进行转义。大多数DBMS通过在保留字周围使用括号来清楚地将其标识为SQL标识符(而不是Literal,例如字符串'hello'(。

最重要的是,在实际查询中,将Key替换为[Key](或"Key"(。

要通过编程实现这一点(并确认括号实际上适用于特定的DBMS(,可以使用:

DBI::dbQuoteIdentifier(con, "Key")
# <SQL> "Key"

这似乎没有告诉你多少,但双引号是真实的。

as.character(DBI::dbQuoteIdentifier(con, "Key"))
# [1] ""Key""

许多(包括SQL Server(将毫无歧义地接受[Key]"Key"

最新更新