RJDBC 无法从 MSSQL 服务器读取 table

RJDBC can't read table from MSSQL server

我在本地 运行 R,数据库远程位于 MS SQL 服务器上。

我做我的准备工作:

require(RJDBC)
# initialize the driver 
drv <- JDBC("com.microsoft.sqlserver.jdbc.SQLServerDriver", "C:/files/sqljdbc4.jar") 
# establish the connection 
conn <- dbConnect(drv, "jdbc:sqlserver://DBserverName.example.com;instanceName=myINS;databaseName=myDB", "myUser", "myPass")

然后我检查我是否可以阅读某些 table 的 header:

dbListFields(conn,"table1")

有效。接下来我尝试阅读完整的 table:

dbReadTable(conn,"table1")

失败:

Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ",  : 
  Unable to retrieve JDBC result set for SELECT * FROM table1 (Invalid object name 'table1'.)

用 SQL 方法也失败了:

sqlText <- paste("SELECT FROM \"table1\" ")
queryResults <- dbGetQuery(conn, sqlText) 

失败:

Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ",  : 
  Unable to retrieve JDBC result set for SELECT * FROM "table1"  (Invalid object name 'table1'.)

不带引号:

sqlText <- paste("SELECT FROM table1 ")
queryResults <- dbGetQuery(conn, sqlText) 

失败:

Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ",  : 
  Unable to retrieve JDBC result set for SELECT * FROM table1  (Invalid object name 'table1'.)

知道为什么会失败吗?

要实际从 table 中读取,需要使用其分层 前缀 来指定它。以下工作:

dbReadTable(conn,"groupingA.table1")

同样有效:

sqlText <- paste("SELECT FROM groupingA.table1 ")
queryResults <- dbGetQuery(conn, sqlText) 

给出包含数据库名称的 table 的确切名称,如果存在 dbo 和 table 名称,例如:

queryResults <- dbGetQuery(conn, "SELECT * FROM [dbname].[dbo].[tablename]")