В библиотеке odbc
есть явление, похожее на ошибку, которое уже много лет известно как проблема со старой, более медленной библиотекой RODBC
, однако обходные решения для RODBC
, похоже, не работают с odbc
.
Проблема:
Очень часто человек может захотеть создать таблицу SQL из двумерного объекта R. В этом случае я делаю это с SQL Server (т. Е. T-SQL). Учетная запись, используемая для аутентификации, например, «sysadmin-account
» может отличаться от владельца и создателя базы данных, в которой будут размещаться создаваемые таблицы, но учетная запись имеет полные разрешения на чтение / запись для целевой БД.
Вызов odbc()
для этого выглядит так и выполняется "успешно"
library(odbc)
db01 <- odbc::dbConnect(odbc::odbc(), "UserDB_odbc_name")
odbc::dbWriteTable(db01, "UserDB.dbo.my_table", r_data)
Это соединяет и создает таблицу, но вместо создания таблицы в предполагаемом месте UserDB.dbo.my_table
, она создается в UserDB.sysadmin-account.dbo.my_table
.
Технически, .dbo
является потомком базы данных UserDB
. то, что это делает, создает новый дочерний объект UserDB
с именем sysadmin-account
с собственным дочерним элементом .dbo
, а затем создает в нем таблицу.
С помощью RODBC
и некоторых других библиотек / языков мы обнаружили, что обходным решением было изменить ссылку на местоположение целевой таблицы в вызове на «.dbo.my_table
» или в некоторых случаях «..dbo.my_table
». Также я думаю, что выполнение запроса к use UserDB
иногда используется, чтобы помочь с RODBC
.
Ни одно из этих решений не имеет никакого эффекта при odbc()
.
Обновление
- Попробовал библиотеку
DBI
в качестве потенциальной замены безрезультатно
- Найден обходной путь отправки данных в глобальную временную таблицу с последующим использованием оператора SQL для копирования из временной таблицы в нужное место