【问题标题】:RJDBC can't read table from MSSQL serverRJDBC 无法从 MSSQL 服务器读取表
【发布时间】:2015-02-04 16:48:51
【问题描述】:

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

知道为什么会失败吗?

【问题讨论】:

    标签: sql-server r mssql-jdbc rjdbc


    【解决方案1】:

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

    dbReadTable(conn,"groupingA.table1")
    

    同样有效:

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

    【讨论】:

    • 你如何确定那个前缀是什么?我的没有使用数据库名称作为前缀。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-22
      • 2012-12-07
      • 2021-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多