How to use dplyr tbl on a SQL Server non-standard schema table

一曲冷凌霜 提交于 2019-11-29 14:54:59

问题


My question is how can I use dplyr functions, such as tbl, on SQL Server tables that do not use the default "dbo" schema?

For more context, I am trying to apply the R database example given here to my own tables: https://db.rstudio.com/ (scroll down to the section entitle "Quick Example").

It starts out ok. This first section runs fine:

install.packages("dplyr")
install.packages("odbc")
install.packages("dbplyr")
install.packages("DBI")

con <- DBI::dbConnect(odbc::odbc(),
                   Driver    = "SQL Server", 
                   Server    = [My Server Name],
                   Database  = "mydatabase",
                   UID       = [My User ID],
                   PWD       = [My Password],
                   Port      = 1433)

I am able to connect to my SQL Server and load in the tables in my database. I know this because

DBI::dbListTables(con)

returns the names of my available tables (but without any schema).

The next line of example code also works when applied to one of my own tables, returning the names of the columns in the table.

DBI::dbListFields(con, "mytable1")

However, once I try to run the next line:

dplyr::tbl(con, "mytable1")

I get an Invalid object name 'mytable1' error, rather than the expected table preview as in the example.

This error does not arise when I run the same code on a different table, mytable2. This time, as expected, I get a preview of mytable2 when I run:

dplyr::tbl(con, "mytable2")

One difference between mytable1 and mytable2 is the schema. mytable1 uses a made-up "abc" schema i.e. mydatabase.abc.mytable1. mytable2 uses the default "dbo" schema i.e. mydatabase.dbo.mytable2.

I tried dplyr::tbl(con, "abc.mytable1") but I get the same Invalid object name error. Likewise when I tried dplyr::tbl(con, "dbo.mytable2") (although it runs fine when I exclude the dbo part).

So how can I use dplyr functions, such as tbl, on SQL Server tables that do not use the default "dbo" schema? Thanks.


回答1:


You can use dbplyr::in_schema.

In your case:

dplyr::tbl(con, dbplyr::in_schema("abc", "mytable1"))


来源:https://stackoverflow.com/questions/45032368/how-to-use-dplyr-tbl-on-a-sql-server-non-standard-schema-table

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!