Sas*_*aei 5 sql sql-server odbc r invalid-object-name
我已经在R中建立了连接:
conn <- dbConnect(odbc::odbc(),
Driver = "SQL Server",
Server = "...",
Database = "AdventureWorks2012")
Run Code Online (Sandbox Code Playgroud)
默认的ODBC驱动程序是AdventureWorks2012。我可以看到数据集很好,例如,以下代码可以正常运行:
dbGetQuery(conn, "SELECT TOP 10 * FROM Person.Person")
Run Code Online (Sandbox Code Playgroud)
另一方面,跑步
dbReadTable(conn, "Person.Person")
Run Code Online (Sandbox Code Playgroud)
产量:
Error: <SQL> 'SELECT * FROM "Person.Person"'
nanodbc/nanodbc.cpp:1587: 42S02: [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'Person.Person'.
Run Code Online (Sandbox Code Playgroud)
相似,正在运行
data <- tbl(conn, "Person.Person")
Run Code Online (Sandbox Code Playgroud)
产量:
Error: <SQL> 'SELECT *
FROM "Person.Person" AS "zzz12"
WHERE (0 = 1)'
nanodbc/nanodbc.cpp:1587: 42S02: [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'Person.Person'.
Run Code Online (Sandbox Code Playgroud)
另外,我很困惑WHERE (0 = 1)
:无法弄清楚它的来源!!!
(1)该表确实存在于数据库中。(2)我已经用正确的模式限定了名称。(3)我已将ODBC中的默认数据库设置为AdventureWorks2012。
感谢您的帮助和见解。谢谢 ...
> tableList <- dbListTables(conn)
> tableList
[1] "AWBuildVersion"
[2] "DatabaseLog"
[3] "DeleteExample"
[4] "EmployeeSales"
[5] "ErrorLog"
[6] "PersonCross"
[7] "PhoneCross"
[8] "Department"
[9] "Employee"
[10] "EmployeeDepartmentHistory"
[11] "EmployeePayHistory"
[12] "JobCandidate"
[13] "Shift"
[14] "Address"
[15] "AddressType"
[16] "BusinessEntity"
[17] "BusinessEntityAddress"
[18] "BusinessEntityContact"
[19] "ContactType"
[20] "CountryRegion"
[21] "EmailAddress"
[22] "Password"
[23] "Person"
[24] "PersonPhone"
...
> dbReadTable(conn, "Person")
Error: <SQL> 'SELECT * FROM "Person"'
nanodbc/nanodbc.cpp:1587: 42S02: [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'Person'.
Run Code Online (Sandbox Code Playgroud)
由于AdventureWorks不维护默认架构(即 no dbo
),请考虑使用odbc::dbId
来正确选择此类架构下的表,如此Git 问题评论中所示:
conn <- dbConnect(odbc::odbc(),
Driver = "SQL Server",
Server = "...",
Database = "AdventureWorks2012")
tbl <- dbId(conn, "Contact", "Person")
dbReadTable(conn, tbl)
Run Code Online (Sandbox Code Playgroud)
注意:odbc
根据一位作者的说法,对模式的支持对于包来说是相对较新的,就在 15 天前。如果 CRAN 版本太旧,您可能需要重新安装 Git 开发版本。