2

我在本地运行 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")

然后我检查是否可以读取某些表的标题:

dbListFields(conn,"table1")

作品。接下来我尝试阅读完整的表格:

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'.)

知道为什么这会失败吗?

4

2 回答 2

0

要实际从表中读取,需要指定其分层前缀。以下工作:

dbReadTable(conn,"groupingA.table1")

同样有效:

sqlText <- paste("SELECT FROM groupingA.table1 ")
queryResults <- dbGetQuery(conn, sqlText) 
于 2015-02-06T17:18:26.487 回答
0

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

queryResults <- dbGetQuery(conn, "SELECT * FROM [dbname].[dbo].[tablename]")
于 2017-04-10T13:15:27.647 回答