使用 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 newId()
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的主要内容,如果未能解决你的问题,请参考以下文章