一般背景
首先,考虑阅读关系数据库架构,其中表封装在模式中,模式本身封装在数据库中,然后封装在服务器或集群中。请注意图像中的图标对应于对象类型:
cluster/server < catalog/database < schema/namespace < table
因此,您的情况没有嵌套表,而是典型的架构:
myserver < QnRStore < dbo < BGBURef
要在 SQL 查询中从服务器级别访问此架构,您可以使用句点限定名称:
SELECT * FROM database.schema.table
SELECT * FROM QnRStore.dbo.BGBURef
SQL Server 的默认架构是dbo
(与 Postgres 相比,它是public
)。通常,像 R 这样的 DB-APIodbc
连接到一个数据库,该数据库允许连接到任何底层模式和相应的表,假设连接的用户有权访问此类模式。请注意,此规则不可普遍适用。例如,Oracle 的模式与所有者一致,而 MySQL 的数据库与模式同义。
请参阅进一步阅读:
- 架构、表和数据库之间有什么区别?
- 使用不同数据库的数据库和架构之间的差异?
- 数据库和模式之间的区别
- 关系数据库中的目录和模式有什么区别?
- 数据库模式与数据库表空间?
具体案例
因此,要连接到默认架构中的 SQL Server 数据库表,只需引用该表,BGBURef
,假设该表位于dbo
连接数据库的架构。
df <- dbReadTable(con, "BGBURef")
如果您使用非默认架构,则需要相应地指定它,最近您可以使用DBI::Id
并可以类似地使用它dbReadTable
and dbWriteTable
:
s <- Id(schema = "myschema", table = "mytable")
df <- dbReadTable(con, s)
dbWriteTable(conn, s, mydataframe)
或者,您可以运行所需的时间段限定 SQL 查询:
df <- dbGetQuery(con, "SELECT * FROM [myschema].[mytable]")
你可以使用SQL()用于写入持久表:
dbWriteTable(con, SQL("myschema.mytable"), mydataframe)