Проблема
При попытке записи в таблицу со схемой, отличной от схемы по умолчанию, dbWriteTable
в DBI пакета записывает в default.non-default.tablename
, а не в non-default.tablename
. Я знаю, что non-default.tablename
существует, потому что он отображается в моей базе данных SSMS.
Воспроизводимый пример / Что я пробовал
Создайте эту таблицу в SQL Server с нестандартной схемой «гость». Я помещаю его в базу данных под названием «SAM»:
CREATE TABLE guest.MikeTestTable(
[a] [float] NULL,
[b] [float] NULL,
[c] [varchar](255) NULL)
#Create a df to insert into guest.MikeTestTable
df <- data.frame(a = c(10, 20, 30),
b = c(20, 40, 60),
c = c("oneT", "twoT", "threeT"))
#Create a connection:
con <- DBI::dbConnect(odbc::odbc(),
.connection_string = "Driver={SQL Server};
server=localhost;
database=SAM;
trustedConnection=true;")
#Try to write contents of df to the table using `dbWriteTable`
DBI::dbWriteTable(conn = con,
name = "guest.MikeTestTable",
value = df,
append = TRUE)
#Create a query to read the data from `"guest.MikeTestTable"`:
q <- "SELECT [a]
,[b]
,[c]
FROM guest.MikeTestTable"
##Read the table into R to show that nothing actually got written to the
##table but that it recognizes `guest.MikeTestTable` does exist:
DBI::dbGetQuery(con, q)
[1] a b c
<0 rows> (or 0-length row.names)
Я подумал, что это странный результат, поэтому я открыл свою SSMS, и о чудо, таблица dbo.guest.MikeTestTable
была создана. Любая помощь приветствуется.
dbWriteTable(con, c("schema_name","table_name"), df, append = TRUE)
- person Parfait   schedule 27.07.2017dbWriteTable(con, c("guest", "MikeTestTable"), df, append = TRUE)
возвращает ошибку:Error: length(name) == 1 is not TRUE
- person user111417   schedule 27.07.2017