使用 dbReadTable in_schema

Posted

技术标签:

【中文标题】使用 dbReadTable in_schema【英文标题】:Using dbReadTable in_schema 【发布时间】:2018-06-25 02:07:09 【问题描述】:

我正在尝试使用 dbReadTable ,但是我的表位于数据库内的架构下。

例如使用下面的代码我可以连接:

  db_ANZSCO <- tbl(con, in_schema("BGVIEW" ,"ANZSCO"))

但是当我尝试使用 dbReadTable 时出现以下错误;

  dbReadTable(con, "ANZSCO"))  

   Error: <SQL> 'SELECT * FROM "ANZSCO"'
     nanodbc/nanodbc.cpp:1587: 42000: [Microsoft][ODBC SQL Server      Driver][SQL Server]The SELECT permission was denied on the object 'ANZSCO', database 'BurningGlass', schema 'dbo'. 

我了解该表位于架构下,但我不知道如何使用 dbReadTable 进行访问,我确实尝试查看文档,但到目前为止我没有成功。

Tks

【问题讨论】:

【参考方案1】:

尝试新的DBI::Id() 函数,它接受架构名称和表名称作为单独的参数。

con <- DBI::dbConnect(drv = odbc::odbc(), dsn = "qqqq") # Replace `qqqq`.
a <- DBI::Id(
  schema  = "BGVIEW",
  table   = "ANZSCO"
)
ds <- DBI::dbReadTable(con, a)
DBI::dbDisconnect(con)

如果这不起作用,请将表格定义粘贴到您的问题中,以及创建连接的代码。您已使用 [rodbc] 标记您的问题,但看起来您正在使用更新且符合 DBI 的 odbc 包。

另见

https://www.r-dbi.org/blog/dbi-2-final/ 的“架构支持”部分 https://github.com/tidyverse/dplyr/issues/3452 https://github.com/r-dbi/odbc/issues/191

【讨论】:

感谢您的回复,我不明白创建对象 a 然后在 ds 中使用 a .. a 有什么用? 抱歉,现在试试。我将错误的代码行传输到浏览器中。 非常感谢,如果您不介意,我有一个简短的问题。 id 有什么作用? 我无法解释它以及上面“另见”下三个链接的作者。最好的简短摘要可能来自“架构支持”部分:"The new Id() function constructs identifiers. All arguments must be named, yet DBI doesn’t specify the argument names, because DBMS have an inconsistent notion of namespaces." 惨遭失败,错误消息如下:Could not create execute: SELECT * from """BGVIEW"".""ANZSCO"""

以上是关于使用 dbReadTable in_schema的主要内容,如果未能解决你的问题,请参考以下文章

dbReadTable 将日期列从 SQL 数据库强制转换为字符

R语言连接Mysql数据库

如何访问 R 中的嵌套 SQL 表?

将十六进制的列转换为R中的文本

测试使用

第一篇 用于测试使用