【发布时间】:2018-04-04 19:48:00
【问题描述】:
我已经在 R 中建立了一个连接:
conn <- dbConnect(odbc::odbc(),
Driver = "SQL Server",
Server = "...",
Database = "AdventureWorks2012")
默认的 ODBC 驱动程序是 AdventureWorks2012。我可以看到数据集很好,例如,以下代码运行没有问题:
dbGetQuery(conn, "SELECT TOP 10 * FROM Person.Person")
另一方面,运行
dbReadTable(conn, "Person.Person")
产量:
Error: <SQL> 'SELECT * FROM "Person.Person"'
nanodbc/nanodbc.cpp:1587: 42S02: [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'Person.Person'.
类似,正在运行
data <- tbl(conn, "Person.Person")
产量:
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'.
另外,我对WHERE (0 = 1) 感到困惑:无法弄清楚它来自哪里!!!
(1) 该表确实存在于数据库中。 (2) 我已经用正确的 Schema 限定了名称。 (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'.
【问题讨论】:
-
我对 odbc 的东西不太了解,但是 'SELECT * FROM "Person.Person"' 的东西看起来很奇怪。我不认为“-quotes 应该用于对象的名称,也许试试 dbReadTable(conn, Person.Person)?
-
根据AdventureWorks,没有
Person.Person表。有Person.Contact和Sales.SalesPerson。 -
AdventureWorks2012 有一个
Person.Person表。 -
你有没有想过萨沙?
标签: sql r sql-server odbc invalid-object-name