There's a bug-like phenomenon in the odbc
library that has been a known issue for years with the older, slower RODBC
library, however the work-around solutions for RODBC
do not seem to work with odbc
.
The problem:
Very often a person may wish to create a SQL table from a 2-dimensional R object. In this case I'm doing so with SQL Server (i.e. T-SQL). The account used to authenticate, e.g. "sysadmin-account
", may be different from the owner and creator of the database that will house tables being created but the account has full read/write permissions for the targeted DB.
The odbc()
call to do so goes like this and runs "successfully"
library(odbc)
db01 <- odbc::dbConnect(odbc::odbc(), "UserDB_odbc_name")
odbc::dbWriteTable(db01, "UserDB.dbo.my_table", r_data)
This connects and creates a table, but instead of creating the table in the intended location of UserDB.dbo.my_table
, it gets created in UserDB.sysadmin-account.dbo.my_table
.
Technically, .dbo
is a child of the UserDB
database. what this is doing is creating a new child object of UserDB
called sysadmin-account
with a child .dbo
of its own, and then creating the table within there.
With RODBC
and some other libraries/languages we found that a work-around solution was to change the reference to the target table location in the call to ".dbo.my_table
" or in some cases "..dbo.my_table
". Also I think running a query to use UserDB
sometimes used to help with RODBC
.
None of these solutions seems to any effect with odbc()
.
Updates
DBI
library as a potential substitute to no avail